This diff adds a new set of ometric sets to show the protocol used to sync
the repository. Possible values are "rrdp", "rsync", "https".

This adds for example
rpki_client_repository_protos{rpki_client_repository_protos="rrdp",name="ripe",carepo="rsync://chloe.sobornost.net/rpki",notify="https://chloe.sobornost.net/rpki/news.xml"}
 1
rpki_client_repository_protos{rpki_client_repository_protos="rsync",name="ripe",carepo="rsync://chloe.sobornost.net/rpki",notify="https://chloe.sobornost.net/rpki/news.xml"}
 0

-- 
:wq Claudio

Index: extern.h
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/extern.h,v
retrieving revision 1.175
diff -u -p -r1.175 extern.h
--- extern.h    13 Mar 2023 19:51:49 -0000      1.175
+++ extern.h    30 Mar 2023 07:50:02 -0000
@@ -756,6 +756,7 @@ const char  *repo_uri(const struct repo *
 void            repo_fetch_uris(const struct repo *, const char **,
                    const char **);
 int             repo_synced(const struct repo *);
+const char     *repo_proto(const struct repo *);
 int             repo_talid(const struct repo *);
 struct repo    *ta_lookup(int, struct tal *);
 struct repo    *repo_lookup(int, const char *, const char *);
Index: output-ometric.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/output-ometric.c,v
retrieving revision 1.1
diff -u -p -r1.1 output-ometric.c
--- output-ometric.c    15 Dec 2022 12:02:29 -0000      1.1
+++ output-ometric.c    30 Mar 2023 07:49:37 -0000
@@ -26,11 +26,13 @@
 #include "ometric.h"
 #include "version.h"
 
-struct ometric *rpki_info, *rpki_completion_time, *rpki_duration;
-struct ometric *rpki_repo, *rpki_obj, *rpki_ta_obj;
-struct ometric *rpki_repo_obj, *rpki_repo_duration, *rpki_repo_state;
+static struct ometric *rpki_info, *rpki_completion_time, *rpki_duration;
+static struct ometric *rpki_repo, *rpki_obj, *rpki_ta_obj;
+static struct ometric *rpki_repo_obj, *rpki_repo_duration;
+static struct ometric *rpki_repo_state, *rpki_repo_proto;
 
 static const char * const repo_states[2] = { "failed", "synced" };
+static const char * const repo_protos[3] = { "rrdp", "rsync", "https" };
 
 static void
 set_common_stats(const struct repostats *in, struct ometric *metric,
@@ -118,6 +120,8 @@ repo_stats(const struct repo *rp, const 
        set_common_stats(in, rpki_repo_obj, ol);
        ometric_set_timespec(rpki_repo_duration, &in->sync_time, ol);
        ometric_set_state(rpki_repo_state, repo_states[repo_synced(rp)], ol);
+       if (repo_synced(rp))
+               ometric_set_state(rpki_repo_proto, repo_proto(rp), ol);
        olabels_free(ol);
 }
 
@@ -158,6 +162,10 @@ output_ometric(FILE *out, struct vrp_tre
            sizeof(repo_states) / sizeof(repo_states[0]),
            "rpki_client_repository_state",
            "repository state");
+       rpki_repo_proto = ometric_new_state(repo_protos,
+           sizeof(repo_protos) / sizeof(repo_protos[0]),
+           "rpki_client_repository_protos",
+           "used protocol to sync repository");
 
        /*
         * Dump statistics
Index: repo.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/repo.c,v
retrieving revision 1.42
diff -u -p -r1.42 repo.c
--- repo.c      29 Mar 2023 17:03:29 -0000      1.42
+++ repo.c      30 Mar 2023 07:56:38 -0000
@@ -1206,6 +1206,27 @@ repo_synced(const struct repo *rp)
 }
 
 /*
+ * Return the protocol string "rrdp", "rsync", "https" which was used to sync.
+ * Result is only correct if repository was properly synced.
+ */
+const char *
+repo_proto(const struct repo *rp)
+{
+
+       if (rp->ta != NULL) {
+               const struct tarepo *tr = rp->ta;
+               if (tr->uriidx < tr->urisz && 
+                   strncasecmp(tr->uri[tr->uriidx], "rsync://", 8) == 0)
+                       return "rsync";
+               else
+                       return "https";
+       }
+       if (rp->rrdp != NULL)
+               return "rrdp";
+       return "rsync";
+}
+
+/*
  * Return the repository tal ID.
  */
 int

Reply via email to