Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
David Goulet
Tor
Commits
a882d1bf
Commit
a882d1bf
authored
Oct 19, 2020
by
David Goulet
🔆
Browse files
metrics: New feature module to track tor metrics
Related to #40063 Signed-off-by:
David Goulet
<
dgoulet@torproject.org
>
parent
ec731290
Changes
9
Hide whitespace changes
Inline
Side-by-side
src/app/main/subsystem_list.c
View file @
a882d1bf
...
...
@@ -31,6 +31,7 @@
#include
"lib/evloop/evloop_sys.h"
#include
"feature/dirauth/dirauth_sys.h"
#include
"feature/metrics/metrics_sys.h"
#include
"feature/relay/relay_sys.h"
#include
<stddef.h>
...
...
@@ -68,6 +69,7 @@ const subsys_fns_t *tor_subsystems[] = {
&
sys_btrack
,
&
sys_dirauth
,
&
sys_metrics
,
};
const
unsigned
n_tor_subsystems
=
ARRAY_LENGTH
(
tor_subsystems
);
src/feature/metrics/.may_include
0 → 100644
View file @
a882d1bf
*.h
src/feature/metrics/include.am
0 → 100644
View file @
a882d1bf
# ADD_C_FILE: INSERT SOURCES HERE.
LIBTOR_APP_A_SOURCES += \
src/feature/metrics/metrics.c \
src/feature/metrics/metrics_sys.c
# ADD_C_FILE: INSERT HEADERS HERE.
noinst_HEADERS += \
src/feature/metrics/metrics.h \
src/feature/metrics/metrics_sys.h
src/feature/metrics/metrics.c
0 → 100644
View file @
a882d1bf
/* Copyright (c) 2007-2020, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
* @file metrics.c
* @brief Metrics subsystem.
**/
#include
"orconfig.h"
#include
"lib/container/smartlist.h"
#include
"lib/log/util_bug.h"
#include
"lib/malloc/malloc.h"
#include
"lib/metrics/metrics_store.h"
#include
"lib/string/printf.h"
#include
"feature/metrics/metrics.h"
#include
"app/main/subsysmgr.h"
/** Return newly allocated string containing the output of all subsystems
* having metrics.
*
* This is used to output the content on the MetricsPort. */
char
*
metrics_get_output
(
const
metrics_format_t
fmt
)
{
char
*
data
;
smartlist_t
*
chunks
=
smartlist_new
();
/* Go over all subsystems that exposes a metrics store. */
for
(
unsigned
i
=
0
;
i
<
n_tor_subsystems
;
++
i
)
{
const
smartlist_t
*
stores
;
const
subsys_fns_t
*
sys
=
tor_subsystems
[
i
];
/* Skip unsupported subsystems. */
if
(
!
sys
->
supported
)
{
continue
;
}
if
(
sys
->
get_metrics
&&
(
stores
=
sys
->
get_metrics
()))
{
SMARTLIST_FOREACH_BEGIN
(
stores
,
const
metrics_store_t
*
,
store
)
{
smartlist_add
(
chunks
,
metrics_store_get_output
(
fmt
,
store
));
}
SMARTLIST_FOREACH_END
(
store
);
}
}
data
=
smartlist_join_strings
(
chunks
,
"
\n
"
,
0
,
NULL
);
SMARTLIST_FOREACH
(
chunks
,
char
*
,
c
,
tor_free
(
c
));
smartlist_free
(
chunks
);
return
data
;
}
/** Initialize the subsystem. */
void
metrics_init
(
void
)
{
}
/** Cleanup and free any global memory of this subsystem. */
void
metrics_cleanup
(
void
)
{
}
src/feature/metrics/metrics.h
0 → 100644
View file @
a882d1bf
/* Copyright (c) 2020, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
* @file metrics.h
* @brief Header for feature/metrics/metrics.c
**/
#ifndef TOR_FEATURE_METRICS_METRICS_H
#define TOR_FEATURE_METRICS_METRICS_H
#include
"lib/metrics/metrics_common.h"
/* Initializer / Cleanup. */
void
metrics_init
(
void
);
void
metrics_cleanup
(
void
);
/* Accessors. */
char
*
metrics_get_output
(
const
metrics_format_t
fmt
);
#endif
/* !defined(TOR_FEATURE_METRICS_METRICS_H) */
src/feature/metrics/metrics_sys.c
0 → 100644
View file @
a882d1bf
/* Copyright (c) 2020, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
* @file metrics_sys.c
* @brief Setup and tear down the metrics subsystem.
**/
#include
"lib/subsys/subsys.h"
#include
"feature/metrics/metrics.h"
#include
"feature/metrics/metrics_sys.h"
static
int
subsys_metrics_initialize
(
void
)
{
metrics_init
();
return
0
;
}
static
void
subsys_metrics_shutdown
(
void
)
{
metrics_cleanup
();
}
const
subsys_fns_t
sys_metrics
=
{
SUBSYS_DECLARE_LOCATION
(),
.
name
=
"metrics"
,
.
supported
=
true
,
.
level
=
METRICS_SUBSYS_LEVEL
,
.
initialize
=
subsys_metrics_initialize
,
.
shutdown
=
subsys_metrics_shutdown
,
};
src/feature/metrics/metrics_sys.h
0 → 100644
View file @
a882d1bf
/* Copyright (c) 2020, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
* @file metrics_sys.h
* @brief Header for feature/metrics/metrics_sys.c
**/
#ifndef TOR_FEATURE_METRICS_METRICS_SYS_H
#define TOR_FEATURE_METRICS_METRICS_SYS_H
extern
const
struct
subsys_fns_t
sys_metrics
;
/**
* Subsystem level for the metrics system.
*
* Defined here so that it can be shared between the real and stub
* definitions.
**/
#define METRICS_SUBSYS_LEVEL (99)
#endif
/* !defined(TOR_FEATURE_METRICS_METRICS_SYS_H) */
src/include.am
View file @
a882d1bf
...
...
@@ -73,6 +73,7 @@ include src/feature/hibernate/include.am
include src/feature/hs_common/include.am
include src/feature/hs/include.am
include src/feature/keymgt/include.am
include src/feature/metrics/include.am
include src/feature/nodelist/include.am
include src/feature/relay/include.am
include src/feature/rend/include.am
...
...
src/lib/subsys/subsys.h
View file @
a882d1bf
...
...
@@ -15,6 +15,7 @@
struct
pubsub_connector_t
;
struct
config_format_t
;
struct
smartlist_t
;
/**
* A subsystem is a part of Tor that is initialized, shut down, configured,
...
...
@@ -190,6 +191,17 @@ typedef struct subsys_fns_t {
* to disk.
**/
int
(
*
flush_state
)(
void
*
);
/**
* Return a list of metrics store of this subsystem. This is called
* everytime a request arrives on the MetricsPort.
*
* The list MUST contain metrics_store_t object and contains entries so it
* can be formatted for the metrics port.
*
* This can return NULL or be NULL.
**/
const
struct
smartlist_t
*
(
*
get_metrics
)(
void
);
}
subsys_fns_t
;
#ifndef COCCI
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment