Plugins¶
Anomaly Detection Framework is extensible by a plugin system.
Plugin files must be placed in $ANOMDEC_HOME/plugins
and are supported
by the configuration parser of anomdec.yml
file.
Interface¶
To create a plugin you will need to implement the class Plugin
. You can
implement any core-around component, so you can extend functionality as much
as you want.
class Plugin(object):
name = None
# A class in a list derived from BaseConsumerBuilder
stream_consumer_builders = []
# A class in a list derived from BaseStreamConsumer
stream_consumers = []
# A class in a list derived from BaseProducerBuilder
stream_producer_builders = []
# A class in a list derived from BaseStreamProducer
stream_producers = []
# A class in a list derived from BaseEngineBuilder
engine_builders = []
# A class in a list derived from BaseEngine
engines = []
# A class in a list derived from BaseRepositoryBuilder
repository_builders = []
# A class in a list derived from BaseRepository
repositories = []
# A class in a list derived from BaseMessageHandler
message_handlers = []
Example¶
Image you want to implement a new source, so you need to implement the Builder
BaseConsumerBuilder
and the Consumer BaseStreamConsumer
. This
consumer will read messages from a socket.
from anomalydetection.backend.core.plugins import Plugin
# Needs to be implemented
class SocketConsumer(BaseStreamConsumer):
def __init__(self, hostname, port):
pass
# This builder is fully implemented, note that the attrs has its own
# setter in the form of ``set_<attrname>``
class SocketConsumerBuilder(BaseConsumerBuilder):
def __init__(self, hostname, port):
self.set_hostname(hostname)
self.set_port(port)
def set_hostname(self, hostname):
self.hostname = str(hostname)
return self
def set_port(self, port):
self.port = int(port)
return self
def build():
return SocketConsumer(**vars(self).copy())
class SocketsPlugin(Plugin):
name = "socket"
stream_consumer_builders = [SocketConsumerBuilder]
stream_consumers = [SocketConsumer]
Use in anomdec.yml¶
The plugin system is fully supported by config parser using the plugin
name in type
sections. And params to the builder are also supported
by params
sections. Here is an example anomdec.yml
file using this
plugin.
version: 1
streams:
- name: test
source:
type: socket
params:
hostname: localhost
port: 8080