agent
Module to manage Agent classes.
Description:
This module:
- Processes a variety of information from agents
- Posts the data using HTTP to a server listed in the configuration file
Agent Objects
class Agent()
Agent class for daemons.
__init__
def __init__(parent, child=None, config=None)
Initialize the class.
Arguments:
parent- Name of parent daemonchild- Name of child daemonconfig- ConfigCore object
Returns:
None
name
def name()
Return agent name.
Arguments:
None
Returns:
value- Name of agent
query
def query()
Create placeholder method. Do not delete.
Arguments:
None
Returns:
None
_AgentRun Objects
class _AgentRun()
Class that defines basic run function for AgentDaemons.
__init__
def __init__(agent)
Initialize the class.
Arguments:
agent- agent object
Returns:
None
run
def run()
Start Polling.
Arguments:
None
Returns:
None
AgentDaemon Objects
class AgentDaemon(_AgentRun, Daemon)
Class that manages base agent daemonization.
__init__
def __init__(agent)
Initialize the class.
Arguments:
agent- agent object
Returns:
None
GracefulAgentDaemon Objects
class GracefulAgentDaemon(_AgentRun, GracefulDaemon)
Class that manages graceful agent daemonization.
__init__
def __init__(agent, timeout=30)
Initialize the class.
Arguments:
agent- agent objecttimeout- agent timeout
Returns:
None
AgentCLI Objects
class AgentCLI()
Class that manages the agent CLI.
Arguments:
None
Returns:
None
__init__
def __init__(graceful=False)
Initialize the class.
Arguments:
graceful- True if graceful restart is required
Returns:
None
process
def process(additional_help=None)
Return all the CLI options.
Arguments:
additional_help- CLI additional help string for argparse
Returns:
args- Namespace() containing all of our CLI arguments as objects- filename: Path to the configuration file
control
def control(agent, timeout=60)
Control the agent from the CLI.
Arguments:
agent- Agent objecttimeout- Agent timeout
Returns:
None
AgentAPI Objects
class AgentAPI(Agent)
Applcication API agent that serves web pages.
Arguments:
None
Returns:
None
__init__
def __init__(parent, child, app, config=None)
Initialize the class.
Arguments:
parent- Name of parent daemonchild- Name of child daemonapp- Flask Appconfig- ConfigCore object
Returns:
None
query
def query()
Query all remote targets for data.
Arguments:
None
Returns:
None
_StandaloneApplication Objects
class _StandaloneApplication(BaseApplication)
Class to integrate the Gunicorn WSGI with the Flask application.
Modified from: http://docs.gunicorn.org/en/latest/custom.html
__init__
def __init__(app, parent, options=None)
Initialize the class.
Arguments:
app- Flask application object of type Flask(name)parent- Name of parent process that is invoking the APIoptions- Gunicorn CLI options
Returns:
None
load_config
def load_config()
Load the configuration.
Arguments:
None
Returns:
None
load
def load()
Run the Flask application throught the Gunicorn WSGI.
Arguments:
None
Returns:
self.application- Flask application object
configuration
switchmap classes that manage various configurations.
_Config Objects
class _Config()
Class gathers all configuration information.
__init__
def __init__()
Intialize the class.
Arguments:
None
Returns:
None
ConfigCore Objects
class ConfigCore(_Config)
Class gathers all configuration information.
__init__
def __init__()
Intialize the class.
Arguments:
None
Returns:
None
agent_subprocesses
def agent_subprocesses()
Get agent_subprocesses.
Arguments:
None
Returns:
result- result
api_log_file
def api_log_file(daemon)
Get api_log_file.
Arguments:
daemon- Name of API daemon
Returns:
result- result
daemon_directory
def daemon_directory()
Determine the daemon_directory.
Arguments:
None
Returns:
result- daemon_directory
log_directory
def log_directory()
Determine the log_directory.
Arguments:
None
Returns:
result- configured log_directory
log_file
def log_file()
Get log_file.
Arguments:
None
Returns:
result- result
log_level
def log_level()
Get log_level.
Arguments:
None
Returns:
result- result
multiprocessing
def multiprocessing()
Get multiprocessing.
Arguments:
None
Returns:
result- result
system_directory
def system_directory()
Determine the system_directory.
Arguments:
None
Returns:
result- configured system_directory
ConfigAPIClient Objects
class ConfigAPIClient(ConfigCore)
Class gathers all configuration information.
__init__
def __init__(section)
Intialize the class.
Arguments:
section- Section of the config file to read
Returns:
None
server_address
def server_address()
Get server_address.
Arguments:
None
Returns:
result- result
server_bind_port
def server_bind_port()
Get server_bind_port.
Arguments:
None
Returns:
result- result
server_https
def server_https()
Get server_https.
Arguments:
None
Returns:
result- result
server_password
def server_password()
Get server_password.
Arguments:
None
Returns:
result- result
server_username
def server_username()
Get server_username.
Arguments:
None
Returns:
result- result
server_url_root
def server_url_root()
Return server_url_root value.
Arguments:
None
Returns:
result- server_url_root value
ConfigAPI Objects
class ConfigAPI(ConfigCore)
Class gathers all configuration information.
__init__
def __init__(section)
Intialize the class.
Arguments:
section- Section of the config file to read
Returns:
None
api_bind_port
def api_bind_port()
Get api_bind_port.
Arguments:
None
Returns:
result- result
api_listen_address
def api_listen_address()
Get api_listen_address.
Arguments:
None
Returns:
result- result
api_https
def api_https()
Get api_https.
Arguments:
None
Returns:
result- result
api_password
def api_password()
Get api_password.
Arguments:
None
Returns:
result- result
api_username
def api_username()
Get api_username.
Arguments:
None
Returns:
result- result
api_url_root
def api_url_root()
Return api_url_root value.
Arguments:
None
Returns:
result- api_url_root value
log
Logging module.
ExceptionWrapper Objects
class ExceptionWrapper()
Class to handle unexpected exceptions with multiprocessing.
NOTE The subprocess needs to return a value for this to work. Returning an implicit "None" isn't sufficient
__init__
def __init__(error_exception)
Initialize the class.
Arguments:
error_exception- Exception object
Returns:
None
re_raise
def re_raise()
Extend the re_raise method.
Arguments:
None
Returns:
None
_GetLog Objects
class _GetLog()
Class to manage the logging without duplicates.
__init__
def __init__()
Initialize the class.
Arguments:
None
Returns:
None
logfile
def logfile()
Return logger for file IO.
Arguments:
None
Returns:
value- Value of logger
stdout
def stdout()
Return logger for terminal IO.
Arguments:
None
Returns:
value- Value of logger
log2console
def log2console(code, message)
Log message to STDOUT only and die.
Arguments:
code- Message codemessage- Message text
Returns:
None
log2die_safe
def log2die_safe(code, message)
Log message to STDOUT only and die.
Arguments:
code- Message codemessage- Message text
Returns:
None
log2warning
def log2warning(code, message)
Log warning message to file only, but don't die.
Arguments:
code- Message codemessage- Message text
Returns:
None
log2debug
def log2debug(code, message)
Log debug message to file only, but don't die.
Arguments:
code- Message codemessage- Message text
Returns:
None
log2info
def log2info(code, message)
Log status message to file only, but don't die.
Arguments:
code- Message codemessage- Message text
Returns:
None
log2see
def log2see(code, message)
Log message to file and STDOUT, but don't die.
Arguments:
code- Message codemessage- Message text
Returns:
None
log2die
def log2die(code, message)
Log to STDOUT and file, then die.
Arguments:
code- Error numbermessage- Descriptive error string
Returns:
None
log2exception_die
def log2exception_die(code, sys_exc_info, message=None)
Log trace message to file and STDOUT, but don't die.
Arguments:
code- Message codesys_exc_info- Tuple from exception from sys.exc_infomessage- Descriptive error string
Returns:
None
log2exception
def log2exception(code, sys_exc_info, message=None, die=False)
Log trace message to file and STDOUT, but don't die.
Arguments:
code- Message codesys_exc_info- Tuple from exception from sys.exc_infomessage- Message to logdie- Die if True
Returns:
None
check_environment
def check_environment()
Check environmental variables. Die if incorrect.
Arguments:
None
Returns:
path- Path to the configurtion directory
root_directory
def root_directory()
Determine the root directory in which switchmap is installed.
Arguments:
None
Returns:
result- Root directory
graphene
Module with graphene functions.
normalize
def normalize(data)
Remove all 'edges' and 'node' keys from graphene results.
Arguments:
data- Dict of graphene results
Returns:
result- Dict withoug 'edges' and 'node' keys
nodes
def nodes(_nodes)
Strip the 'node' key from a list of graphene nodes.
Arguments:
_nodes- List of graphene node dicts
Returns:
result- List without the 'node' key
daemon
Generic linux daemon base class for python 3.x.
Daemon Objects
class Daemon()
A generic daemon class.
Usage: subclass the daemon class and override the run() method.
Modified from http://www.jejik.com/files/examples/daemon3x.py
__init__
def __init__(agent)
Initialize the class.
Arguments:
agent- Agent object
Returns:
None
delpid
def delpid()
Delete the PID file.
Arguments:
None
Returns:
None
delskip
def delskip()
Delete the skip file.
Arguments:
None
Returns:
None
dellock
def dellock()
Delete the lock file.
Arguments:
None
Returns:
None
start
def start()
Start the daemon.
Arguments:
None
Returns:
None
force
def force()
Stop the daemon by deleting the lock file first.
Arguments:
None
Returns:
None
stop
def stop()
Stop the daemon.
Arguments:
None
Returns:
None
restart
def restart()
Restart the daemon.
Arguments:
None
Returns:
None
status
def status()
Get daemon status.
Arguments:
None
Returns:
result- True if the PID and PID file exists
run
def run()
Override this method when you subclass Daemon.
This method will be called after the process has been daemonized by start() or restart(). The base implementation does nothing and should be overridden in derived classes to add actual daemon functionality.
Arguments:
None
Returns:
None
GracefulDaemon Objects
class GracefulDaemon(Daemon)
Daemon that allows for graceful shutdown.
This daemon should allow for stop/restart commands to perform graceful shutdown of a given process. A graceful shutdown involves checking that whether a current process is running and only ending the process once the current process has completed its currently running task.
__init__
def __init__(agent, timeout=30)
Initialize the class.
Arguments:
agent- Agent objecttimeout- Timeout for graceful shutdown
Returns:
None
graceful_shutdown
def graceful_shutdown(callback)
Initializes the wrapper with the callback function fn.
Arguments:
callback- callback method
Returns:
wrapper- Wrapper function
stop
def stop()
Stop the daemon gracefully.
Uses parent class stop method after checking that daemon is no longer processing data or making use of a resource.
Arguments:
None
Returns:
None
restart
def restart()
Restarts the daemon gracefully.
Uses parent class restart method after checking that daemon is not processing data or making use of a resource.
Arguments:
None
Returns:
None
data
Module for data handling.
hashstring
def hashstring(string, sha=256, utf8=False)
Create a UTF encoded SHA hash string.
Arguments:
string- String to hashsha- Length of SHA hashutf8- Return utf8 encoded string if true
Returns:
result- Result of hash
dictify
def dictify(data)
Convert NamedTuple to dict.
Arguments:
data- NamedTuple
Returns:
result- Dict representation of object
general
Module with general purpose functions.
check_user
def check_user(config)
Check to make sure the user environment is correct.
Arguments:
config- Config object
Returns:
None
check_sudo
def check_sudo()
Check user isn't running as sudo.
Arguments:
None
Returns:
None
cleanstring
def cleanstring(data)
Remove multiple whitespaces and linefeeds from string.
Arguments:
data- String to process
Returns:
result- Stipped data
octetstr_2_string
def octetstr_2_string(bytes_string)
Convert SNMP OCTETSTR to string.
Arguments:
bytes_string- Binary value to convert
Returns:
result- String equivalent of bytes_string
random_hash
def random_hash()
Create a random Hex hash.
Arguments:
None
Returns:
result- Hex hash
mac
def mac(_mac)
Convert MAC address to a standardized format.
Arguments:
_mac- MAC address
Returns:
result- MacAddress object
root_directory
def root_directory()
Determine the root directory in which switchmap is installed.
Arguments:
None
Returns:
result- Root directory
ipaddress
def ipaddress(_ip)
Validate an IP address.
Arguments:
_ip- IP address
Returns:
result- IP Object
make_bool
def make_bool(result)
Create a boolean version of the argument.
Arguments:
result- Object to transform
Returns:
result- boolean
consistent_keys
def consistent_keys(_data)
Convert dict keys to ints if possible.
Arguments:
_data- Multidimensional dict
Returns:
result- dict
group_consecutive
def group_consecutive(data)
Group consecutive numbers in a list.
https://stackoverflow.com/questions/2154249/ identify-groups-of-consecutive-numbers-in-a-list
Arguments:
data- list
Returns:
ranges- List of lists
human_readable
def human_readable(num, suffix="B", storage=False)
Convert number to human readable value.
https://stackoverflow.com/questions/1094841/ get-human-readable-version-of-file-size
Arguments:
num- Number to convertsuffix- The suffix for the human readable outputstorage- Use binary 1024 for evaluating storage otherwise use regular decimal.
Returns:
result- Numeric string
padded_list_of_lists
def padded_list_of_lists(data, width=4, pad=None)
Create a padded list of list.
Arguments:
data- List to processwidth- Width of the list of listspad- Value to pad the last row of the list of lists with
Returns:
result- list of lists
rest
Functions for creating URIs.
post
def post(uri, data, config, server=True)
Create URI for datacenter RRD and oid_id data.
Arguments:
uri- URI for postingdata- Data to postconfig- ConfitAPIClient objectserver- Posting to a server if True, API if False
Returns:
data- Post named tuple
get
def get(uri, config, server=True, die=True)
Get data fro URI from API server.
Arguments:
uri- URI for postingconfig- ConfigAPIClient objectserver- True if getting data from an database API serverdie- Die if the connection fails if True
Returns:
success- True if successful
get_graphql
def get_graphql(query, config, die=True)
Get data fro URI from API server.
Arguments:
query- Query string from GraphQL serverconfig- ConfigAPIClient objectdie- Die if the connection fails if True
Returns:
success- True if successful
files
Switchmap files library.
_Directory Objects
class _Directory()
A class for creating the names of system directories.
__init__
def __init__(config)
Initialize the class.
Arguments:
config- Config object
Returns:
None
pid
def pid()
Define the system pid directory.
Arguments:
None
Returns:
value- pid directory
lock
def lock()
Define the system lock directory.
Arguments:
None
Returns:
value- lock directory
snmp
def snmp()
Define the system snmp directory.
Arguments:
None
Returns:
value- snmp directory
_File Objects
class _File()
A class for creating the names of system files.
__init__
def __init__(config)
Initialize the class.
Arguments:
config- Config object
Returns:
None
pid
def pid(prefix)
Define the pid file.
Arguments:
prefix- Prefix of file
Returns:
value- pid directory
lock
def lock(prefix)
Define the lock file.
Arguments:
prefix- Prefix of file
Returns:
value- lock directory
skip
def skip(prefix)
Define the skip file.
Arguments:
prefix- Prefix of file
Returns:
value- skip directory
snmp
def snmp(prefix, create=True)
Define the system snmp directory.
Arguments:
prefix- Prefix of filecreate- Create file if True
Returns:
value- snmp directory
move_yaml_files
def move_yaml_files(src, dst)
Move all yaml files from source to destination directory.
Arguments:
src- Source directorydst- Destination directory
Returns:
None
read_yaml_files
def read_yaml_files(directories)
Read the contents of all yaml files in a directory.
Arguments:
directories- List of directory names with configuration files
Returns:
config_dict- Dict of yaml read
read_yaml_file
def read_yaml_file(filepath, as_string=False, die=True)
Read the contents of a YAML file.
Arguments:
filepath- Path to file to be readas_string- Return a string if Truedie- Die if there is an error
Returns:
result- Dict of yaml read
mkdir
def mkdir(directory)
Create a directory if it doesn't already exist.
Arguments:
directory- Directory name
Returns:
None
pid_file
def pid_file(agent_name, config)
Get the pidfile for an agent.
Arguments:
agent_name- Agent nameconfig- Config object
Returns:
result- Name of pid file
lock_file
def lock_file(agent_name, config)
Get the lockfile for an agent.
Arguments:
agent_name- Agent nameconfig- Config object
Returns:
result- Name of lock file
skip_file
def skip_file(agent_name, config)
Get the skip file for an agent.
Arguments:
agent_name- Agent nameconfig- Config object
Returns:
result- Name of skip file
snmp_file
def snmp_file(hostname, config)
Get the snmpfile for an agent.
Arguments:
hostname- hostnameconfig- Config object
Returns:
result- Name of snmp file
execute
def execute(command, die=True)
Run the command UNIX CLI command and record output.
Arguments:
command- CLI command to executedie- Die if errors found
Returns:
returncode- Return code of command execution
config_filepath
def config_filepath()
Get the configuration filename.
Arguments:
None
Returns:
result- Filename
variables
Module for classes that format variables.
AgentAPIVariable Objects
class AgentAPIVariable()
Variable representation for data required by the AgentAPI.
__init__
def __init__(ip_bind_port=20201, ip_listen_address="0.0.0.0")
Initialize the class.
Arguments:
ip_bind_port- ip_bind_portip_listen_address- TCP/IP address on which the API is listening.
Returns:
None
__repr__
def __repr__()
Return a representation of the attributes of the class.
Arguments:
None
Returns:
result- String representation.
__init__
Define the switchmap.core package.
Arguments:
None
Returns:
None