netdef.Rules package

Rules

Rules

class netdef.Rules.Rules.Rules(shared=None)[source]

Bases: object

add_shared_object(shared)[source]
init()[source]
load(base_packages)[source]
netdef.Rules.Rules.register(name, classref=None)[source]

A decorator to register rules. Example:

from netdef.Rules import BaseRule, Rules

@Rules.register("NewRuleTemplate")
class NewRuleTemplate(BaseRule.BaseRule):
    def __init__(self, name, shared):
        ...

Can also be called as a normal function:

from netdef.Rules import BaseRule, Rules

def setup(shared):
    Rules.register("NewRuleTemplate", NewRuleTemplate)

class NewRuleTemplate(BaseRule.BaseRule):
    def __init__(self, name, shared):
        ...
Parameters:
  • name (str) – Name of the rule class
  • classref (object) – Should be None if used as a decorator and a class if called as a function
Returns:

A callable that returns a class if used as a decorator and a class if called as a normal function

utils

netdef.Rules.utils.get_module_from_string(mod_str, package, abs_root, location_name, mod_name)[source]
netdef.Rules.utils.import_file(abs_pyfile, location_name, mod_name)[source]
netdef.Rules.utils.load_entrypoint(entrypoint, package=None)[source]

Abstract base

This is an abstract baseclass

BaseRule

class netdef.Rules.BaseRule.BaseRule(name, shared)[source]

Bases: object

Abstract class for rules.

Parameters:
  • name (str) – Name to be used in logfiles
  • shared (netdef.Shared.Shared) – a reference to the shared object
add_class_to_controller(source_name, controller_name=None)[source]

Sends ADD_PARSER to controls. Controllers will use static functions defined in these classes to decode / encode values etc.

Parameters:
  • source_name (str) – source name as string
  • controller_name (str) – controller name as string
add_instance_to_controller(item_instance)[source]

Send ADD_SOURCE to controller of given source.

Parameters:item_instance (netdef.Sources.BaseSource) – source instance
add_interrupt(interrupt)[source]

Setup the interrupt signal

add_new_expression(expr_info)[source]

This function does too many things:

  1. Updates shared.expressions.instances (indirectly via self.maintain_searches)
  2. Associate the sources with expressions as arguments
  3. Finds sources and sends them to controllers with ADD_SOURCE message
add_new_parser(source_name, controller_name=None)[source]

It is not always easy for a controller to understand what kind data that a source regards as value. Some controllers do not even know which source to update with data.

Therefore the source classes has static functions that the controller can use to find out these things.

Use this function to add a source class to a controller as a parser.

Parameters:
  • source_name (str) – source as string
  • controller_name (str) – controller as string
convert_to_instance(item_name, source_name, controller_name, rule_name, defaultvalue)[source]

Uses the source name to find the actual source class. Make a instance off the given source class, returns the instance

Parameters:
  • item_name (str) – item as string
  • source_name (str) – source as string
  • controller_name (str) – controller as string
  • rule_name (str) – rule as string
  • defaultvalue – could be anything.
Returns:

instance of source

get_existing_instance(source_instance)[source]
get_expressions(instance)[source]

Returns all expression that is associated with the given instance

Returns:list or None
static get_module_from_string(mod_str, package=None, abs_root=None, location_name=None, mod_name=None)[source]
get_ticks()[source]
handle_run_expression(incoming, value, source_time, status_code)[source]
has_existing_instance(source_instance)[source]

Returns True if the source we are working on already exists. This is important, because we do not want more than one source instance for each value…

has_interrupt()[source]

Returns True if the interrupt signal is received

init_queue()[source]

Setup the message queue and timeout

loop_incoming()[source]

Get every message from the queue and dispatch the associated handler function

maintain_searches(source_instance, expression)[source]

Keeps shared.expressions.instances updated

process_ticks()[source]
rule_name_from_key(key, default_rule_name)[source]

Check if rule name is valid.

Parameters:
  • key (str) – the source key
  • default_rule_name (str) – rule name to use if not found by given key
Returns:

rule name

Return type:

str

Raises:

ValueError – if rule does not exists

run()[source]

Override this function in rule. Example:

def run(self):
    self.logger.info("Running")

    while not self.has_interrupt():
        self.loop_incoming() # dispatch handle_* functions

    self.logger.info("Stopped")
send_expressions_to_engine(item_instance, expressions, value, source_time, status_code)[source]

Send RUN_EXPRESSION to the engine

Parameters:
  • item_instance – the source instance that triggered the expressions
  • expressions (list) – list of expressions
send_ticks()[source]
setup()[source]

Implement the following:

  1. Open and read a configuration file
  2. Create SourceInfo for the sources found in config
  3. Create instance of expression found in config
  4. Create source instances based on data in SourceInfo
  5. Link source instances to expression.
  6. Send ADD_SOURCE and ADD_PARSER to controllers
setup_done()[source]

Update useful statistics

setup_ticks()[source]
sleep(seconds)[source]

” Sleep by waiting for the interrupt. Should be used instead of time.sleep. Override if sleep should be interrupted by even more signals

source_and_controller_from_key(key, controller=None)[source]

Check if controller name is valid. Returns a valid (key, controller) tuple

Parameters:
  • key (str) – the source key
  • controller (str) – controller name to use if not found by given key
Returns:

tuple of key and controller

Return type:

tuple

Raises:

ValueError – if controller does not exists

update_statistics(namespace, error_count, expression_count, source_count)[source]

Write useful info to Statistics-singleton

class netdef.Rules.BaseRule.ExpressionInfo(module, arguments, func='expression', setup='setup')[source]

Bases: object

This is a data class that describes an expression. The rule shall create an expression based on this description

arguments
func
module
setup
class netdef.Rules.BaseRule.SourceInfo(typename, key, controller=None, defaultvalue=None, setup='setup')[source]

Bases: object

This is a data class that describes a source. The rule shall create a source instance based on this description

controller
defaultvalue
get_setup_func(instance)[source]
key
setup
typename

Built-in rule modules

CSVRule

class netdef.Rules.CSVRule.CSVRule(name, shared)[source]

Bases: netdef.Rules.BaseRule.BaseRule

Tip

Development Status :: 5 - Production/Stable

handle_run_expression(incoming, value, source_time, status_code)[source]
run()[source]

Main loop. Will exit when receiving interrupt signal

setup()[source]

Parse config files

setup_csv_rule(name)[source]

Parse CSV file.

InfluxDBLoggerRule

class netdef.Rules.InfluxDBLoggerRule.InfluxDBLoggerRule(name, shared)[source]

Bases: netdef.Rules.BaseRule.BaseRule

handle_run_expression(incoming, value, source_time, status_code)[source]
run()[source]

Main loop. Will exit when receiving interrupt signal. Calls setup_auto_logging() once at startup

setup()[source]
setup_auto_logging()[source]

Autogenerate logging expressions and sources for every source that is already created by other rules

INIRule

class netdef.Rules.INIRule.INIRule(name, shared)[source]

Bases: netdef.Rules.BaseRule.BaseRule

Caution

Development Status :: 4 - Beta

handle_run_expression(incoming, value, source_time, status_code)[source]
run()[source]

Main loop. Will exit when receiving interrupt signal

setup()[source]

Parse config files

setup_ini_rule(name, rel_inifile)[source]

parse given ini-file

YAMLRule

class netdef.Rules.YAMLRule.YAMLRule(name, shared)[source]

Bases: netdef.Rules.BaseRule.BaseRule

Danger

Development Status :: 3 - Alpha

handle_run_expression(incoming, value, source_time, status_code)[source]
run()[source]

Main loop. Will exit when receiving interrupt signal

setup()[source]

Parse config files

setup_yaml_rule(name, rel_yamlfile)[source]

parse given yaml-file