This guide explains how to work with services in Veridock.
Services in Veridock are long-running processes that provide specific functionality. They can be:
veridock service list
Or via API:
curl http://localhost:8082/service/list
veridock service start <service-name>
veridock service stop <service-name>
veridock service status <service-name>
Veridock comes with several built-in services:
A basic service has the following structure:
services/
my-service/
__init__.py
service.py
config.json
requirements.txt
Here’s a simple service that logs messages at regular intervals:
# services/my-service/service.py
import time
import logging
from threading import Thread, Event
class MyService:
def __init__(self, config):
self.config = config
self.running = Event()
self.thread = None
self.interval = config.get('interval', 5)
def start(self):
if self.running.is_set():
return False
self.running.set()
self.thread = Thread(target=self._run)
self.thread.daemon = True
self.thread.start()
return True
def stop(self):
if not self.running.is_set():
return False
self.running.clear()
if self.thread:
self.thread.join(timeout=5)
return True
def _run(self):
while self.running.is_set():
logging.info(f"Service is running (interval: {self.interval}s)")
time.sleep(self.interval)
def create_service(config):
return MyService(config)
Create a config.json
file:
{
"name": "my-service",
"description": "My custom service",
"version": "1.0.0",
"interval": 5
}
Create an __init__.py
file:
# services/my-service/__init__.py
from .service import create_service
def register():
return {
"name": "my-service",
"create": create_service,
"config_schema": {
"type": "object",
"properties": {
"interval": {"type": "integer", "default": 5}
}
}
}
List your service’s dependencies in requirements.txt
:
requests>=2.25.0
python-dotenv>=0.15.0
Services can be configured through:
Example configuration:
services:
my-service:
enabled: true
config:
interval: 10
log_level: INFO
veridock logs my-service
Services can expose metrics in Prometheus format:
# HELP service_requests_total Total number of requests
# TYPE service_requests_total counter
service_requests_total{service="my-service"} 42
Here’s how to create a simple web service:
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
class WebService:
def __init__(self, config):
self.config = config
self.server = None
def start(self):
port = self.config.get('port', 8080)
self.server = HTTPServer(('0.0.0.0', port), RequestHandler)
self.server.service = self
self.thread = Thread(target=self.server.serve_forever)
self.thread.daemon = True
self.thread.start()
return True
def stop(self):
if self.server:
self.server.shutdown()
self.server.server_close()
return True
return False
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
response = {
'status': 'ok',
'service': 'web-service',
'path': self.path
}
self.wfile.write(json.dumps(response).encode())
def create_service(config):
return WebService(config)