-
Notifications
You must be signed in to change notification settings - Fork 37
Kobo Hub Client Worker by kobo admin howto
- The Hub - Central server to coordinate workers. It provides XML-RPC methods for use by clients and workers.
- The client - Command line tool to control a hub (Add task, ...).
- The Worker - Command line program to process tasks from a hub.
In this example directory '''hcw-project''' is used (hcv stands for hub-client-worker).
$ mkdir ~/hcw-project $ cd ~/hcw-project
In this example '''my_hub''' name is used.BR
$ kobo-admin start-hub my_hub
Set sqlite3 as an database engine.BR
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': '/home/<your-username>/hcw-project/my_hub/db', 'USER': '', 'PASSWORD': '', 'HOST': '', 'PORT': '', } } ... FILES_PATH = '~/hcw-project/my_hub/files'
Note: Path to sqlite3 database could be relative too. But in case use with the Apache server there is necessary use an absolute path.
$ cd my_hub $ python manage.py syncdb ... Create a superuser (e.g. admin:admin just for simplicity) ...
$ python manage.py runserver
Open http://127.0.0.1:8000/ in a web browser.BR Select login (upper right corner) and log in with the superuser credentials.BR '''Add an user to the hub''BR Select admin (upper right corner) -> Users -> Add user.BR Add an user "foouser" with password "foo12345" and click "Save"BR '''Add a worker to the hub''BR Return to the admin home page (http://127.0.0.1:8000/admin/) and select workers -> Add worker.BR Leave "Worker key" blank and fill "Name" with '''FQDN - Fully Qualified Domain Name''' (output of a command "hostname --fqdn")BR Add Arch "noarch" and Channel "default" (at the bottom of page) and click "Save".BR Click on the created worker and copy a value from a "Worker key" field. We'll need it later.BR
Open a new terminal and run:
$ cd ~/hcw-project $ kobo-admin start-worker myfirstworker
$ cd myfirstworker/ $ export MYFIRSTWORKER_CONFIG_FILE=~/hcw-project/myfirstworker/myfirstworker.conf
Edit myfirstworker.conf
AUTH_METHOD = "worker_key" ... WORKER_KEY = "qrrMevJHhaf61f8k7iDlvC0OP93MvMtQO5Och2BPS8FBQokqP4B6CqiQJhh4ILsy" # ^^^^ Use the worker key from administration ^^^^^^^^^^^^^^^^^^^^ ... PID_FILE = "/home/<your-username>/hcw-project/myfirstworker/myfirstworker.pid" ... LOG_FILE = "/home/<your-username>/hcw-project/myfirstworker/myfirstworker.log"
$ cd tasks/ $ kobo-admin start-worker-task add_two_numbers
Modify the task (file: task_add_two_numbers.py)
arches = ["noarch"] channels = ["default"] ... def run(self): num_1 = self.args["a"] num_2 = self.args["b"] self.result = str(int(num_1)+int(num_2)) ...
$ cd ~/hcw-project/myfirstworker/ $ python myfirstworker --foreground
Open a new terminal and run:
$ cd ~/hcw-project $ kobo-admin start-client myclient
$ cd myclient/ $ export MYCLIENT_CONFIG_FILE=~/hcw-project/myclient/myclient.conf
Edit myclient.conf
AUTH_METHOD = "password" ... USERNAME = "foouser" ... PASSWORD = "foo12345"
$ cd commands/ $ kobo-admin start-client-command add_two_numbers
Modify the run method in a cmd_add_two_numbers.py
def run(self, *args, **kwargs): # optparser output is passed via *args (args) and **kwargs (opts) username = kwargs.pop("username", None) password = kwargs.pop("password", None) if len(args) != 2: self.parser.error("Use two numbers as arguments") self.set_hub(username, password) kwargs = { "owner_name": username, "label": "Add two numbers.", "method": "AddTwoNumbers", "args": { "a": args[0], "b": args[1], }, "weight": 0, "arch_name": "noarch", "channel_name": "default", } print self.hub.client.create_task(kwargs) ... # Remove a line with "raise NotImplementedError"
$ python myclient --username admin --password admin add-two-numbers 5 7
$ python myclient help # Show a help message with available commands. $ python myclient list-workers # List of workers available on the hub.
Open http://127.0.0.1:8000/ in a web browser.BR Select "Tasks". Your submited task shoud be there.BR Go to the task detail by click the task id, here you can find a task result (the result is number 12).BR