plugins.makai_event_plugin
index
/Users/anthony/Development/opq/mauka/plugins/makai_event_plugin.py

This module provides a plugin and utilities for interacting and transforming raw data produced from Makai events.

 
Modules
       
config
constants
logging
math
mongo
multiprocessing
numpy
scipy.optimize
plugins
protobuf
scipy.signal
threading
typing

 
Classes
       
plugins.base_plugin.MaukaPlugin(builtins.object)
MakaiEventPlugin

 
class MakaiEventPlugin(plugins.base_plugin.MaukaPlugin)
    MakaiEventPlugin(conf: config.MaukaConfig, exit_event: <bound method BaseContext.Event of <multiprocessing.context.DefaultContext object at 0x1058e0e10>>)
 
This plugin retrieves data when Makai triggers events, performs feature extraction, and then publishes relevant
features to Mauka downstream plugins.
 
 
Method resolution order:
MakaiEventPlugin
plugins.base_plugin.MaukaPlugin
builtins.object

Methods defined here:
__init__(self, conf: config.MaukaConfig, exit_event: <bound method BaseContext.Event of <multiprocessing.context.DefaultContext object at 0x1058e0e10>>)
Initializes the base plugin
 
:param conf: Configuration dictionary
:param subscriptions: List of subscriptions this plugin should subscribe to
:param name: The name of this plugin
acquire_and_produce(self, event_id: int)
Acquire raw data for a given event_id, perform feature extraction, and produce to the rest of the Mauka
processing pipeline.
:param event_id: The event id to load raw data for.
on_message(self, topic, mauka_message)
This gets called when a subscriber receives a message from a topic they are subscribed too.
 
This should be implemented in all subclasses.
 
:param topic: The topic this message is associated with
:param mauka_message: The message contents

Data and other attributes defined here:
NAME = 'MakaiEventPlugin'

Methods inherited from plugins.base_plugin.MaukaPlugin:
debug(self, msg: str)
Prints a debug message using this classes logger and formatted the plugin name.
:param msg: Message to print to debug.
get_mongo_client(self)
Returns an OPQ mongo client
 
:return: An OPQ mongo client
get_status(self) -> str
Return the status of this plugin
:return: The status of this plugin
handle_self_message(self, message: str)
Handles a self-message
 
:param message: The message to handle
is_self_message(self, topic: str) -> bool
Determines if this is a message directed at this plugin. I.e. the topic is the name of the plugin.
 
:param topic: Topic of the message
:return: If this is a self message or not
produce(self, topic: str, mauka_message: mauka_pb2.MaukaMessage)
Produces a message with a given topic to the system
 
:param topic: The topic to produce this message to
:param mauka_message: The message to produce
run_plugin(self)
This is the run loop for this plugin process
start_heartbeat(self)
This is a recursive function that acts as a heartbeat.
 
This function calls itself over-and-over on a timer to produce heartbeat messages. The interval can be
configured is the configuration file.

Data descriptors inherited from plugins.base_plugin.MaukaPlugin:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
Functions
       
acquire_data(mongo_client: mongo.OpqMongoClient, event_id: int, box_id: str, name: str, filter_order: int, filter_cutoff_frequency: float, frequency_samples_per_window: int, filter_down_sample_factor: int) -> Tuple[mauka_pb2.MaukaMessage, mauka_pb2.MaukaMessage, mauka_pb2.MaukaMessage, mauka_pb2.MaukaMessage]
Given an event_id, acquire the raw data for each box associated with the given event. Perform feature
extraction of the raw data and publish those features for downstream plugins.
:param box_id: The box id.
:param mongo_client: The mongo client to use to make this request.
:param event_id: The event id to acquire data for.
:param name: The name of the service requesting data.
:param filter_order:
:param filter_cutoff_frequency:
:param frequency_samples_per_window:
:param filter_down_sample_factor:
find_zero_xings(waveform: numpy.ndarray) -> numpy.ndarray
Function which returns a boolean array indicating the positions of zero crossings in the the waveform
:param waveform:
:return: a boolean array indicating the positions of zero crossings in the the waveform
frequency(samples: numpy.ndarray, down_sample_factor: int) -> float
Calculates the frequency of the supplied samples
:param samples: Samples to calculate frequency over.
:param down_sample_factor: the down sampling factor from the filtering, used to modify the sampling rate
:return: The frequency value of the provided samples in Hz.
frequency_waveform(waveform: numpy.ndarray, window_size: int, filter_order: int, cutoff_frequency: float, down_sample_factor) -> numpy.ndarray
Calculated frequency of a waveform using a given window size. In most cases, our window size should be the
number of samples in a cycle.
:param waveform: The waveform to find frequency values for.
:param window_size: The size of the window used to compute frequency over the waveform.
:param filter_order: order of band pass butterworth filter
:param cutoff_frequency: cutoff frequency of low pass butterworth filter to smooth digital signal
:param down_sample_factor: The down sample factor
:return: An array of frequency values calculated for a given waveform.
rerun(event_id: int)
Rerun all makai events through the Mauka analysis pipeline.
:param event_id: The event id to rerun through the Mauka analysis pipeline.
smooth_waveform(sample: numpy.ndarray, filter_order: int = 2, cutoff_frequency: float = 500.0, downsample_factor: int = 4) -> numpy.ndarray
Method to smooth waveform using a butterworth filter to lower sensitivity of frequency calculation.
:param sample:
:param filter_order:
:param cutoff_frequency:
:param downsample_factor: downsample factor for decimate function
:return:
vrms(samples: numpy.ndarray) -> float
Calculates the Voltage root-mean-square of the supplied samples
:param samples: Samples to calculate Vrms over.
:return: The Vrms value of the provided samples.
vrms_waveform(waveform: numpy.ndarray, window_size: int = 200.0) -> numpy.ndarray
Calculated Vrms of a waveform using a given window size. In most cases, our window size should be the
number of samples in a cycle.
:param waveform: The waveform to find Vrms values for.
:param window_size: The size of the window used to compute Vrms over the waveform.
:return: An array of vrms values calculated for a given waveform.

 
Data
        ACQUIRE_DATA_TYPE = typing.Tuple[mauka_pb2.MaukaMessage, mauka_pb2.M..., mauka_pb2.MaukaMessage, mauka_pb2.MaukaMessage]