Add Agent Service¶
This document is a stripped version of Add Logic Service.
Agent Service File Structure¶
Add Package _private/agent
¶
Create directory peek_plugin_tutorial/_private/agent
Create an empty package file in the agent directory,
peek_plugin_tutorial/_private/agent/__init__.py
Commands:
mkdir peek_plugin_tutorial/_private/agent
touch peek_plugin_tutorial/_private/agent/__init__.py
Add File AgentEntryHook.py
¶
Create the file peek_plugin_tutorial/_private/agent/AgentEntryHook.py
and populate it with the following contents.
import logging
from peek_plugin_base.agent.PluginAgentEntryHookABC import PluginAgentEntryHookABC
logger = logging.getLogger(__name__)
class AgentEntryHook(PluginAgentEntryHookABC):
def __init__(self, *args, **kwargs):
"""" Constructor """
# Call the base classes constructor
PluginAgentEntryHookABC.__init__(self, *args, **kwargs)
#: Loaded Objects, This is a list of all objects created when we start
self._loadedObjects = []
def load(self) -> None:
""" Load
This will be called when the plugin is loaded, just after the db is migrated.
Place any custom initialiastion steps here.
"""
logger.debug("Loaded")
def start(self):
""" Load
This will be called when the plugin is loaded, just after the db is migrated.
Place any custom initialiastion steps here.
"""
logger.debug("Started")
def stop(self):
""" Stop
This method is called by the platform to tell the peek app to shutdown and stop
everything it's doing
"""
# Shutdown and dereference all objects we constructed when we started
while self._loadedObjects:
self._loadedObjects.pop().shutdown()
logger.debug("Stopped")
def unload(self):
"""Unload
This method is called after stop is called, to unload any last resources
before the PLUGIN is unlinked from the platform
"""
logger.debug("Unloaded")
Edit peek_plugin_tutorial/__init__.py
¶
Edit the file peek_plugin_tutorial/__init__.py
, and add the following:
from peek_plugin_base.agent.PluginAgentEntryHookABC import PluginAgentEntryHookABC
from typing import Type
def peekAgentEntryHook() -> Type[PluginAgentEntryHookABC]:
from ._private.agent.AgentEntryHook import AgentEntryHook
return AgentEntryHook
Edit plugin_package.json
¶
Edit the file peek_plugin_tutorial/plugin_package.json
:
Add “agent” to the requiresServices section so it looks like
"requiresServices": [ "agent" ]
Add the agent section after requiresServices section:
"agent": { }
Ensure your JSON is still valid (Your IDE may help here)
Here is an example
{
"plugin": {
...
},
"requiresServices": [
"agent"
],
"agent": {
}
}
The plugin should now be ready for the agent service to load.
Running on the Agent Service¶
Edit ~/peek-agent-service.home/config.json
:
- Ensure logging.level is set to “DEBUG”
- Add “peek_plugin_tutorial” to the plugin.enabled array
Note
It would be helpful if this is the only plugin enabled at this point.
It should somthing like this:
{
...
"logging": {
"level": "DEBUG"
},
...
"plugin": {
"enabled": [
"peek_plugin_tutorial"
],
...
},
...
}
Note
This file is created in Administration. Running the Agent Service will also create the file.
You can now run the peek agent service, you should see your plugin load.
peek@_peek:~$ run_peek_agent_service
...
DEBUG peek_plugin_tutorial._private.agent.AgentEntryHook:Loaded
DEBUG peek_plugin_tutorial._private.agent.AgentEntryHook:Started
...