Skip to main content

Common utilities for creating (controlled) collectors for Grafolean

Project description

About Grafolean Collector Python library

This is a Python 3 library which helps build data collectors (bots) for Grafolean, an easy to use generic monitoring system. It only comes handy for controlled (that is: non-custom) bots, which are managed through Grafolean UI. Examples of such bots are SNMP, ICMP Ping and NetFlow bots, which all use this library.

License

License is Commons Clause license (on top of Apache 2.0) - source is available, you can use it for free (commercially too), modify and share, but you can't sell it to third parties. See LICENSE.md for details.

If in doubt, please open an issue to get further clarification.

Installing

$ pip install grafoleancollector

Usage

Library grafoleancollector provides a framework for easier interaction with Grafolean backend API. It is not needed, everything can be done with calls to the API, but it does provide abstractions that should make a job of writing a bot easier.

An underlying assumption is that a bot caters for exactly one protocol, and that data is polled. If the data should be pushed then there is no need for a framework - simply publish the data to Grafolean when available.

This library provides a class Collector. It is expected that bot implementators will subclass Collector and implement missing functions. Class provides:

  • fetch_job_configs() - a function for fetching "job configs" - for each applicable account, each applicable entity, and each applicable sensors (along with all the necessary details)
  • execute() - a blocking function that performs periodic calls to jobs() and schedules the returned (periodic) jobs

The responsibility of developer is to:

  1. implement jobs() function
  2. implement a function that will get called whenever a job should be run (perform_job in example below, do_snmp in SNMP Bot). This function should call send_results_to_grafolean() to post results to Grafolean.

The corresponding changes in Grafolean frontend need to be made as well (support for the protocol - credentials, sensors, possibly another entity type). Currently this can only be done by modifying Grafolean frontend source code.

Implementing jobs()

The main purpose of this method is to split information about what needs to be done (usually this information is a result of calling self.fetch_job_configs()) into separate jobs. The way this is done is protocol-specific. For example, SNMP Bot needs to know about all the sensors on an entity in a single job, because it might be able to optimize queries (merge them, use BULK). On the other hand NetFlow Bot only handles a single sensor per job, because it doesn't need to merge them - which simplifies implementation.

A short example (which works with a fictional MyProtocol protocol) would look like this:

from grafoleancollector import Collector, send_results_to_grafolean

class MyProtocolBot(Collector):

    def jobs(self):
        for entity_info in self.fetch_job_configs('myprotocol'):
            for sensor_info in entity_info["sensors"]:
                # The job could be triggered at different intervals - it is triggered when at least one of the specified intervals matches.
                intervals = [sensor_info["interval"]]
                # `job_id` must be a unique, permanent identifier of a job. When the job_id changes, the job will be rescheduled - so make sure it is something that
                # identifies this particular job.
                job_id = str(sensor_info["sensor_id"])
                # Prepare parameters that will be passed to `perform_job()` whenever the job is being run:
                # (don't forget to pass backend_url and bot_token!)
                job_params = { **sensor_info, "entity_info": entity_info, "backend_url": self.backend_url, "bot_token": self.bot_token }
                yield job_id, intervals, MyProtocolBot.perform_job, job_params

    # This method is called whenever the job needs to be done. It gets the parameters and performs fetching of data.
    @staticmethod
    def perform_job(affecting_intervals, **job_params):
        # affecting_intervals: the intervals (subset of intervals yielded by jobs() method) which caused this job to be
        # triggered. Only useful if there is more than one interval that could trigger the job.

        # ... fetch data using `job_params` ...

        # send the data to Grafolean:
        send_results_to_grafolean(
            job_params['backend_url'],
            job_params['bot_token'],
            job_params['entity_info']['account_id'],
            values,  # dict; keys are paths (strings), values are corresponding values (numbers)
        )

backend_url = os.environ.get('BACKEND_URL')
bot_token = os.environ.get('BOT_TOKEN')
jobs_refresh_interval = 60

b = MyProtocolBot(backend_url, bot_token, jobs_refresh_interval)
b.execute()  # blocking

Development

Contributing

To contribute to this repository, CLA needs to be signed. Please open an issue about the problem you are facing before submitting a pull request.

Issues

If you encounter any problems installing or running the software, please let us know in the issues.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

grafoleancollector-0.0.10rc1.tar.gz (8.9 kB view details)

Uploaded Source

Built Distributions

grafoleancollector-0.0.10rc1-py3.6.egg (16.1 kB view details)

Uploaded Source

grafoleancollector-0.0.10rc1-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file grafoleancollector-0.0.10rc1.tar.gz.

File metadata

  • Download URL: grafoleancollector-0.0.10rc1.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.10

File hashes

Hashes for grafoleancollector-0.0.10rc1.tar.gz
Algorithm Hash digest
SHA256 8c1d04d4d2f0e7593eea330ba82ecd2ea6ac123b528bfbfb3beee4c91a21ac27
MD5 06cbd8f6c2b7f5459af94e7195645670
BLAKE2b-256 16bbd344e778b5feae3a9b54cc196dceb1e434fb6889da170d46e65b86f11b22

See more details on using hashes here.

File details

Details for the file grafoleancollector-0.0.10rc1-py3.6.egg.

File metadata

  • Download URL: grafoleancollector-0.0.10rc1-py3.6.egg
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.10

File hashes

Hashes for grafoleancollector-0.0.10rc1-py3.6.egg
Algorithm Hash digest
SHA256 10db7ed4f109745d31d8f06043a65d398ee5adb5f1279b21c98d11d4af47552b
MD5 b65eea77e9e2d575a3e3b1bc91c155e3
BLAKE2b-256 dfe0f5178ca07c734b4e6ed92726ceec9c65035b641fd6c025a9bee0e7d1e5e3

See more details on using hashes here.

File details

Details for the file grafoleancollector-0.0.10rc1-py3-none-any.whl.

File metadata

  • Download URL: grafoleancollector-0.0.10rc1-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.10

File hashes

Hashes for grafoleancollector-0.0.10rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 5ca58854df5a96781219b902847b0ab29d2bbe99fdabc0c58eb5219b44d0ab58
MD5 cf85c02202482283a10b61537d8662d6
BLAKE2b-256 a389f55b44ac8c86067cbb6aa788bff1964253f87f7746efe6964d2ca03c2e26

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page