auc: support queue_position status from server
authorDaniel Golle <daniel@makrotopia.org>
Wed, 17 Mar 2021 21:09:50 +0000 (21:09 +0000)
committerDaniel Golle <daniel@makrotopia.org>
Mon, 10 May 2021 03:20:41 +0000 (04:20 +0100)
Display position in queue while waiting for build.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
utils/auc/src/auc.c

index 5836875a3d8bec2adb3e23d89579df084c1a184f..ba3fdfa5f32e825395c6e2192cd7c091795eb298 100644 (file)
@@ -238,6 +238,7 @@ enum {
        TARGET_METADATA_VERSION,
        TARGET_REQUEST_HASH,
        TARGET_SOURCE_DATE_EPOCH,
+       TARGET_QUEUE_POSITION,
        TARGET_STATUS,
        TARGET_STDERR,
        TARGET_STDOUT,
@@ -263,6 +264,7 @@ static const struct blobmsg_policy target_policy[__TARGET_MAX] = {
        [TARGET_METADATA_VERSION] = { .name = "metadata_version", .type = BLOBMSG_TYPE_INT32 },
        [TARGET_REQUEST_HASH] = { .name = "request_hash", .type = BLOBMSG_TYPE_STRING },
        [TARGET_SOURCE_DATE_EPOCH] = { .name = "source_date_epoch", .type = BLOBMSG_TYPE_STRING },
+       [TARGET_QUEUE_POSITION] = { .name = "queue_position", .type = BLOBMSG_TYPE_INT32 },
        [TARGET_STATUS] = { .name = "status", .type = BLOBMSG_TYPE_STRING },
        [TARGET_STDERR] = { .name = "stderr", .type = BLOBMSG_TYPE_STRING },
        [TARGET_STDOUT] = { .name = "stdout", .type = BLOBMSG_TYPE_STRING },
@@ -424,6 +426,9 @@ static int verrevcmp(const char *val, const char *ref)
 #define ANSI_COLOR_RESET ANSI_ESC "[0m"
 #define ANSI_COLOR_RED ANSI_ESC "[1;31m"
 #define ANSI_COLOR_GREEN ANSI_ESC "[1;32m"
+#define ANSI_CURSOR_SAFE "[s"
+#define ANSI_CURSOR_RESTORE "[u"
+#define ANSI_ERASE_LINE "[K"
 
 #define PKG_UPGRADE 0x1
 #define PKG_DOWNGRADE 0x2
@@ -1395,7 +1400,7 @@ int main(int args, char *argv[]) {
        int upg_check = 0;
        int revcmp;
        unsigned char argc = 1;
-       bool force = false, use_get = false;
+       bool force = false, use_get = false, in_queue = false;
 
        snprintf(user_agent, sizeof(user_agent), "%s (%s)", argv[0], AUC_VERSION);
        fprintf(stdout, "%s\n", user_agent);
@@ -1559,7 +1564,19 @@ int main(int args, char *argv[]) {
                                        fputs("Requesting build", stderr);
 
                                retry_delay = 2;
-                               fputc('.', stderr);
+                               if (tb[TARGET_QUEUE_POSITION]) {
+                                       fprintf(stderr, "%s%s (position in queue: %d)",
+                                               ANSI_ESC, in_queue?ANSI_CURSOR_RESTORE:ANSI_CURSOR_SAFE,
+                                               blobmsg_get_u32(tb[TARGET_QUEUE_POSITION]));
+                                       in_queue = true;
+                               } else {
+                                       if (in_queue)
+                                               fprintf(stderr, "%s%s%s%s",
+                                                       ANSI_ESC, ANSI_CURSOR_RESTORE,
+                                                       ANSI_ESC, ANSI_ERASE_LINE);
+                                       fputc('.', stderr);
+                                       in_queue = false;
+                               }
                        } else {
                                retry_delay = 0;
                        }