From 1163d858fa8705f89f1423712f5a3609fb109715 Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 13 Sep 2019 09:30:21 -0400 Subject: [PATCH] More work on tt --- content/posts/tt_1.md | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/content/posts/tt_1.md b/content/posts/tt_1.md index 8c76af2..ce6ec5a 100644 --- a/content/posts/tt_1.md +++ b/content/posts/tt_1.md @@ -36,6 +36,8 @@ def search_artist(name, mbid): I need to call `search_artist()` about 350000 times and I don't want to bother setting up multithreading, error handling and keeping the script up to date on an arbitrary server so let's integrate it in the tracker. +## Configurating the task_tracker project + My usual workflow is to create a project per script. I pushed the script to a [Gogs](https://gogs.io/) instance and created the project. This also works with Github/Gitea. {{< figure src="/tt/new_project.png" title="New task_tracker project">}} @@ -46,7 +48,40 @@ in real time with no additional configuration. {{< figure src="/tt/hook.png" title="Gogs webhook configuration">}} +The final configuration step is to set the *project secret*, which we will use to store authentication details. +Only workers which we have given explicit `ASSIGN` permission will be able to read this information. +{{< figure src="/tt/secret.png" title="Project secret settings">}} + + +## Writing the worker script + +The way **task_tracker_drone** works is by passing the task object and project secret as command line arguments to the + executable file called `run` in the root of the git repository. It also expects a json + object telling it if the task was processed successfully, and if there are additionnal actions that needs to be executed: + +{{}} +{ + "result": 1, + "logs": [ + {"message": "This is an 'ERROR' (level 3) message that will be saved in the tracker", "level": 3} + ], + "tasks": [ + { + "project": 1, + "recipe": "This task will be submitted to the tracker", + "..." + }, + ] +} +{{}} +*(See [LogLevel constants](https://github.com/simon987/task_tracker_drone/blob/master/src/tt_drone/api.py#L12))* + + +This is what the body of the final worker script looks like: + +The program expects the task recipe and project secret as arguments, and it outputs the result object +to stdout. {{}} try: @@ -69,9 +104,9 @@ try: except Exception as e: print(json.dumps({ - # Tell task_tracker that this task failed. It will be re-attempted later + # tell task_tracker that this task failed. it will be re-attempted later "result": 1, - # Send full stack trace. It will be available in the Logs page. + # send full stack trace. it will be available in the logs page. "logs": [ {"message": str(e) + traceback.format_exc(), "level": 3} ] @@ -85,6 +120,4 @@ print(json.dumps({ - -{{< figure src="/tt/secret.png" title="Project secret settings">}} {{< figure src="/tt/perms.png" title="Private project require approval">}}