Altruistic Angelshark is a project devoted to making Communication Manager (ACM) automation easier.

Overview

Altruistic Angelshark

GitHub all releases GitHub GitHub Workflow Status Conventional git style

Altruistic Angelshark is a project devoted to making Communication Manager (ACM) automation easier. It uses the OSSI protocol over SSH to run user commands on one or more configurable ACMs. This functionality is exposed as a developer library (libangelshark), a command line application (angelsharkcli), and an HTTP daemon (angelsharkd).

Detailed User Guides

These guides give an overview of the end-user Angelshark applications, their capabilities, and common use cases. It assumes the user has familiarity with using a shell and the command line. Most commands are formatted for *nix. They should all be directly translatable to Windows, just make sure you're using (for example) angelsharkcli for *nix and angelsharkcli.exe for Windows.

  • angelsharkcli: a command line application for running OSSI-formatted commands on one or more ACMs and parses the output data into useful formats (CSV, JSON, etc.)
  • angelsharkd: a HTTP service for running OSSI-formatted commands formatted in JSON on one or more ACMs, by one or more clients

Installation

angelsharkcli is available as a prebuilt binary for many platforms in the GitHub releases. To install angelsharkcli from source, use cargo:

cargo install --git https://github.com/adpllc/altruistic-angelshark.git angelsharkcli

To install angelsharkd from source:

cargo install --git https://github.com/adpllc/altruistic-angelshark.git angelsharkd

Quick Examples

Get the numbers and names of all stations on a single ACM via the CLI.

$ printf 'a03\nclist stat\nf8005ff00\nf8003ff00\nt\n' | angelsharkcli print
17571230001    Arnold, Ray
17571230002    Muldoon, Robert
17571230003    Panic Rm. 1

Check three ACMs for a station and print it as JSON via the CLI.

$ angelsharkcli print --format json <<EOF
a01
a02
a03
clist stat 17571230000
f8005ff00
f8003ff00
t
EOF
[
  [
    "17571230000",
    "Nedry, Dennis",
  ]
]
angelsharkcli: ossi (02): 1 00000000 29cf No records match the specified query options
angelsharkcli: ossi (01): 1 00000000 29cf No records match the specified query options

Do the same thing over HTTP with curl.

$ nohup angelsharkd &
nohup: ignoring input and appending output to 'nohup.out'
$ curl -X POST http://localhost:8080/ossi -H 'Content-Type: application/json' -d '[
    {
        "acms": [
            "lab",
            "04",
            "11"
        ],
        "command": "list stat 17576123489",
        "fields": [
            "8005ff00",
            "8003ff00"
        ]
    }
]'

[
    {
        "acm": "01",
        "command": "list stat 17571230000",
        "error": "1 00000000 29cf No records match the specified query options",
        "fields": [ "8005ff00", "8003ff00" ],
        "datas": []
    },
    {
        "acm": "03",
        "command": "list stat 17571230000",
        "error": "",
        "fields": [ "8005ff00", "8003ff00" ],
        "datas": [
            [
                "17571230000",
                "Nedry, Dennis"
            ]
        ]
    },
    {
        "acm": "02",
        "command": "list stat 17571230000",
        "error": "1 00000000 29cf No records match the specified query options",
        "fields": [ "8005ff00", "8003ff00" ],
        "datas": []
    }
]

$ cat nohup.out
[2021-10-12T19:34:55Z INFO  angelsharkd] Starting server on 127.0.0.1:8080 ...
[2021-10-12T19:35:44Z INFO  warp::filters::log] 127.0.0.1:49366 "POST /ossi HTTP/1.1" 200 "-" "curl/7.71.1" 4.2123963s

Why should I use Angelshark? Why might it be preferable to ASA or other projects?

  • Angelshark is cross-platform. It is available for Windows, Mac OSX, Linux, and FreeBSD. Angelshark should run on anything that can compile it. If statically linked, no runtime dependencies are required.
  • It requires no graphical desktop to generate the same output as ASA, making it more versatile for servers or containers.
  • Angelshark executables are super-fast binaries and commands are run in parallel across multiple ACMs to deliver output faster.
  • Angelshark does not need or use waits or timeouts (such as one would see with expect scripts).
  • Angelshark can parse ACM output data into a variety of useful formats including tab-delimited (TSV), CSV, and JSON.
  • The command line is easily scripted with login configuration, command files, and task schedulers such as Cron. It outputs tab-delimited data by default, making it friendly for sed, grep, and awk.
  • It is extensible, allowing developers to use the daemon or the library to write their own software on top of Angelshark!
  • Angelshark uses libssh internally and will work on platforms without an SSH client, such as OpenSSH.
!=:,-`'-,,:=!~><<^^^^**^^^^<<~~!=:,,-'` !i H 5 `````.''-__,,,::" =.-q^*x H :rrr>~!!==::,,,_--'.Z , y`6@= -e` r` xr=**rr" n_ ??"!~]` !|? .. `}r:` '(` ,Hx^^^^*- -<***^^^^r(
                                                  `r***`
                                                _i?`  .|v-
                                              
    
             ^x:
                                            rx_            =]~  `-'
                                _^**^**=` -V,                X]*!=:,-`'-,,:=!~><<^^^^**^^^^<<~~!=:,,-'`        !i H
5          `````.''-__,,,::"                                          =.-q^*x
H      :rrr>~!!==::,,,_--'.Z                                , y`6@=    -e`  r`
xr=**rr"                   n_                               ??"!~]`  !|?
 ..                        `}r:`         '(`                 ,Hx^^^^*-
                              -<***^^^^r(
     
    
Comments
  • Monitor BCMS Skill renders JSON mess

    Monitor BCMS Skill renders JSON mess

    The monitor bcms skill command seems to dump all of the output as a single record in JSON format. Is this due to the formatting of the output, or something internal in the JSON parser?

    opened by jjschwarz 6
  • Allow users to extend the daemon with their own warp filters

    Allow users to extend the daemon with their own warp filters

    This will allow for additional, domain-specific functionality to be added to the daemon easily. For example, if a user wants to be able to perform a station search, instead of just running a command, they can add the relevant warp filter to route traffic to that endpoint and execute their own code. These should be opt-in with feature flags.

    opened by 53hornet 2
  • Extensions and simple extension search

    Extensions and simple extension search

    This PR implements compile-time, feature-flag-enabled extensions to angelsharkd. It also adds the first extension implemented this way, simple_search, which allows clients to quickly find extension-types/stations given a list of keywords.

    opened by 53hornet 1
  • `angelsharkd` throws 400 for perfectly valid request

    `angelsharkd` throws 400 for perfectly valid request

    Angelshark Daemon is expecting datas to be arrays of arrays of strings instead of arrays of strings as written in the docs and used internally.

    This was caused by a typo in the request DTO during refactoring.

    opened by 53hornet 1
  • feat: limit the number of search results with a query string parameter

    feat: limit the number of search results with a query string parameter

    This patch adds the ability to limit the number of returned results from the search extension. This may be helpful for clients where broad search terms and large result sets may result in poor performance due to network utilization and memory usage. The limit is introduced in the form of a query string parameter, ?limit=100. If no parameter is passed, all results are returned. Angelshark does not guarantee the order of results returned, and the first 100 results may differ from search to search.

    opened by 53hornet 0
  • Log extension-type statistics on search haystack refresh

    Log extension-type statistics on search haystack refresh

    These stats may be used for capacity reporting purposes, but are also an indicator of memory and network usage, as well as refresh time for Angelshark.

    opened by 53hornet 0
  • feat: support station busyout/release toggling via extension

    feat: support station busyout/release toggling via extension

    Introduces bulk station busyout/release toggle endpoints via the simple_busy extension. Bumps angelsharkd version. Feature is documented in README. Removes TODO in simple_deprov README.

    opened by 53hornet 0
  • With no subcommands, runner and OSSI errors aren't printed

    With no subcommands, runner and OSSI errors aren't printed

    https://github.com/adpllc/altruistic-angelshark/blob/9a940e64d55c4144fb65c702241eeac99a426bd1/angelsharkcli/src/main.rs#L142

    This line is the culprit. The format string should include the provided error. This should also apply to the runner eprintln a few lines above.

    opened by 53hornet 0
  • Display alarm command appears to ignore the field values

    Display alarm command appears to ignore the field values

    I am able to use the fields array in the commands to filter everything so far, except for the display alarms command. If I sent the command string:

    [{"acms": ["CM01"],"fields": ["0002ff00", "0004ff00", "0005ff00"],"command": "display alarm"}]

    I get back

    [{ "acm": "CM01", "command": "display alarm", "error": "", "fields": ["0001ff00", "0002ff00", "0003ff00", "0004ff00", "0005ff00", "000cff00", "000dff00", "4e21ff00", "000eff00", "0006ff00", "0007ff00", "0008ff00", "000fff00", "0009ff00", "000aff00", "000bff00"], "datas": [ ["S000775", "DIG-IP-S", "n", "5428", "WARNING", "OUT", "", "", "06", "14", "17", "20", "00", "00", "00", "00"] ] }]

    I have tried other display commands and they seem to work just fine.

    I have also tried the variant: [{"acms": ["CM01"],"fields": ["0001ff00"],"command": "display alarm"}] just to test, but I got back the same data set.

    Thoughts on what I am missing here?

    opened by jjschwarz 3
  • Allow for authentication via `ssh-agent` in the CLI

    Allow for authentication via `ssh-agent` in the CLI

    Having the option to use a system's ssh-agent would be a nice way of handling other key exchange algorithms, key-based authentication, and interactive passwords. It would also allow users to forbid keeping their passwords in plaintext.

    opened by 53hornet 0
Releases(2022.05.14)
Owner
ADP, LLC.
ADP, LLC.
Druid Exporter plays a fundamental role as a receiver of metrics events coming from Druid clusters, adopting the HTTP format as a means of communication

Druid Exporter plays a fundamental role as a receiver of metrics events coming from Druid clusters, adopting the HTTP format as a means of communication. In addition to this capability, its primary function is to export these metrics to Prometheus, thus allowing the creation of meaningful graphs and visualizations.

Kiwfy 3 Sep 21, 2023
Druid Exporter plays a fundamental role as a receiver of metrics events coming from Druid clusters, adopting the HTTP format as a means of communication.

Druid Exporter plays a fundamental role as a receiver of metrics events coming from Druid clusters, adopting the HTTP format as a means of communication. In addition to this capability, its primary function is to export these metrics to Prometheus, thus allowing the creation of meaningful graphs and visualizations.

Not Empty Free Software Foundation 5 Oct 24, 2023
Elkodon - true zero-copy inter-process-communication in rust

elkodon - Zero-Copy Lock-Free IPC Purely Written In Rust Introduction Performance Getting Started Publish Subscribe Events Custom Configuration Suppor

null 12 Nov 27, 2023
Eclipse iceoryx2™ - true zero-copy inter-process-communication in pure Rust

iceoryx2 - Zero-Copy Lock-Free IPC Purely Written In Rust Introduction Performance Getting Started Publish Subscribe Events Custom Configuration Suppo

null 136 Jan 1, 2024
🚀 10x easier, 🚀 10x cheaper, 🚀 high performance, 🚀 petabyte scale - Elasticsearch/Splunk/Datadog alternative for 🚀 (logs, metrics, traces).

?? 10x easier, ?? 10x cheaper, ?? petabyte scale - Elasticsearch/Splunk/Datadog alternative for ?? (logs, metrics, traces). ZincObserve ZincObserve is

Zinc Labs Inc. 80 Feb 22, 2023
Making Typescript + GraphQL a pleasant experience

tsgql Making Typescript and GraphQL a pleasant experience. What is this? tsgql is an experimental GraphQL code generator that takes a different approa

Modfy 53 Oct 30, 2022
Simple SSH, TELNET connection manager written in rust

gcoma gcoma or Geri's Connection Manager is a small project, that I started to learn rust. The goal of this project is to create a MTPuTTY like cli ap

Bak Gergely János 2 Sep 30, 2022
Authentication workaround for N-Central Report Manager.

Authentication workaround for N-Central Report Manager. Takes the link that N-Central creates for Report Manager and outputs a working link.

501 Commons 1 Jan 31, 2022
Asynchronous Linux SocketCAN - Broadcast Manager support (BCM) with tokio

tokio-socketcan-bcm The Broadcast Manager protocol provides a command based configuration interface to filter and send (e.g. cyclic) CAN messages in k

Marcel 4 Nov 8, 2022
Ark Server Manager: Ascended

Ark Server Manager: Ascended Latest Development Build: Dev Build Development builds are not recommended for use by non-developers. They may be quite b

Cliff Hudson 24 Nov 14, 2023
Simple project to test grpc between ruby (client) and rust (server)

grpc-example Simple project to test grpc between ruby (client) and rust (server). Usage To simplify a lot this project uses docker and docker compose

Bruno Arueira 2 Oct 14, 2021
This Intelligent Transportation Systems (ITS) MQTT client based on the JSon ETSI specification transcription provides a ready to connect project for the mobility

This Intelligent Transportation Systems (ITS) MQTT client based on the JSon ETSI specification transcription provides a ready to connect project for the mobility (connected and autonomous vehicles, road side units, vulnerable road users,...). Let's connect your device or application to our Intelligent Transport Systems (ITS) platform!

Orange 4 Nov 29, 2022
A metrics collection application for Linux machines. Created for MSCS 710 Project at Marist College.

Linux-Metrics-Collector A metrics collection application for Linux machines. Created for MSCS 710 Project at Marist College. Development Environment S

Christopher Ravosa 2 May 2, 2022
Mateversum is a peer-to-peer WebXR metaverse project.

Mateversum ?? Mateversum (pronounced: MAH-tay-ver-sum) is a peer-to-peer WebXR metaverse project. The idea is that you'd be able to connect to a netwo

Ashley 23 Dec 21, 2022
Final Project for "Computer Networking Security": A Layer-3 VPN implementation over TLS

Final Project for "Computer Networking Security": A Layer-3 VPN implementation over TLS

Siger Yang 2 Jun 7, 2022
Rust WebGL2 wrapper with a focus on making high-performance WebAssembly graphics code easier to write and maintain

Limelight Limelight is a WebGL2 wrapper with a focus on making high-performance WebAssembly graphics code easier to write and maintain. demo.mov live

drifting in space 27 Dec 30, 2022
Canary - Distributed systems library for making communications through the network easier, while keeping minimalism and flexibility.

Canary Canary is a distributed systems and communications framework, focusing on minimalism, ease of use and performance. Development of Canary utiliz

null 28 Nov 3, 2022
A Rust utility library, making easier by taking the hassle out of working. :octocat:

reddish A Rust utility library, making easier by taking the hassle out of working. Usage Add this to your Cargo.toml: [dependencies] reddish = "0.2.0"

Rogério Araújo 12 Jan 21, 2023
SKYULL is a command-line interface (CLI) in development that creates REST API project structure templates with the aim of making it easy and fast to start a new project.

SKYULL is a command-line interface (CLI) in development that creates REST API project structure templates with the aim of making it easy and fast to start a new project. With just a few primary configurations, such as project name, you can get started quickly.

Gabriel Michaliszen 4 May 9, 2023
A simple, cross-platform GUI automation module for Rust.

AutoPilot AutoPilot is a Rust port of the Python C extension AutoPy, a simple, cross-platform GUI automation library for Python. For more information,

null 271 Dec 27, 2022