66#include "errno-util.h"
77#include "json-util.h"
88#include "manager.h"
9+ #include "mkdir-label.h"
10+ #include "metrics.h"
911#include "path-util.h"
1012#include "pidref.h"
1113#include "string-util.h"
@@ -402,6 +404,22 @@ int manager_setup_varlink_server(Manager *m) {
402404 return 1 ;
403405}
404406
407+ static int vl_method_list (sd_varlink * link , sd_json_variant * parameters , sd_varlink_method_flags_t flags , void * userdata ) {
408+ Manager * m = ASSERT_PTR (userdata );
409+ int r ;
410+
411+ assert (link );
412+ assert (m -> units );
413+
414+ r = sd_varlink_dispatch (link , parameters , /* dispatch_table= */ NULL , /* userdata= */ NULL );
415+ if (r != 0 )
416+ return r ;
417+
418+ return sd_varlink_replybo (
419+ link ,
420+ SD_JSON_BUILD_PAIR ("units.active_units" , SD_JSON_BUILD_INTEGER (hashmap_size (m -> units ))));
421+ }
422+
405423static int manager_varlink_init_system (Manager * m ) {
406424 int r ;
407425
@@ -430,6 +448,11 @@ static int manager_varlink_init_system(Manager *m) {
430448 }
431449 }
432450
451+ (void ) mkdir_label ("/run/systemd/metrics" , 0755 );
452+ r = metrics_setup_varlink_server (& m -> metrics_varlink_server , m -> event , vl_method_list , m , "/run/systemd/metrics/io.systemd.Manager" );
453+ if (r < 0 )
454+ return log_error_errno (r , "Failed to set up metrics varlink server: %m" );
455+
433456 return 1 ;
434457}
435458
@@ -464,6 +487,7 @@ static int manager_varlink_init_user(Manager *m) {
464487 return log_error_errno (r , "Failed to bind to varlink socket '%s': %m" , address );
465488 }
466489
490+ // TODO: Make metrics server work for user manager
467491 return manager_varlink_managed_oom_connect (m );
468492}
469493
@@ -482,4 +506,5 @@ void manager_varlink_done(Manager *m) {
482506
483507 m -> varlink_server = sd_varlink_server_unref (m -> varlink_server );
484508 m -> managed_oom_varlink = sd_varlink_close_unref (m -> managed_oom_varlink );
509+ m -> metrics_varlink_server = sd_varlink_server_unref (m -> metrics_varlink_server );
485510}
0 commit comments