mirror of
https://github.com/systemd/systemd.git
synced 2025-03-28 02:50:16 +03:00
resolved: fixed bugs reported in varlink statistics (#28796)
Fixes https://github.com/systemd/systemd/issues/28791 Follow-up for bc837621a38efbaff14fbe33bfe5c34dac805343
This commit is contained in:
parent
5007942477
commit
a67e5c6e37
@ -1072,7 +1072,7 @@ static int verb_tlsa(int argc, char **argv, void *userdata) {
|
||||
|
||||
static int show_statistics(int argc, char **argv, void *userdata) {
|
||||
_cleanup_(table_unrefp) Table *table = NULL;
|
||||
JsonVariant *reply = NULL, *stats = NULL;
|
||||
JsonVariant *reply = NULL;
|
||||
_cleanup_(varlink_unrefp) Varlink *vl = NULL;
|
||||
int r;
|
||||
|
||||
@ -1084,17 +1084,8 @@ static int show_statistics(int argc, char **argv, void *userdata) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to issue DumpStatistics() varlink call: %m");
|
||||
|
||||
stats = json_variant_by_key(reply, "statistics");
|
||||
if (!stats)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
|
||||
"DumpStatistics() response is missing 'statistics' key.");
|
||||
|
||||
if (!json_variant_is_object(stats))
|
||||
return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
|
||||
"DumpStatistics() response 'statistics' field not an object");
|
||||
|
||||
if (!FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF))
|
||||
return json_variant_dump(stats, arg_json_format_flags, NULL, NULL);
|
||||
return json_variant_dump(reply, arg_json_format_flags, NULL, NULL);
|
||||
|
||||
struct statistics {
|
||||
JsonVariant *transactions;
|
||||
@ -1109,7 +1100,7 @@ static int show_statistics(int argc, char **argv, void *userdata) {
|
||||
{},
|
||||
};
|
||||
|
||||
r = json_dispatch(stats, statistics_dispatch_table, NULL, JSON_LOG, &statistics);
|
||||
r = json_dispatch(reply, statistics_dispatch_table, NULL, JSON_LOG, &statistics);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@ -1239,7 +1230,7 @@ static int show_statistics(int argc, char **argv, void *userdata) {
|
||||
}
|
||||
|
||||
static int reset_statistics(int argc, char **argv, void *userdata) {
|
||||
JsonVariant *reply = NULL, *s = NULL;
|
||||
JsonVariant *reply = NULL;
|
||||
_cleanup_(varlink_unrefp) Varlink *vl = NULL;
|
||||
int r;
|
||||
|
||||
@ -1251,11 +1242,6 @@ static int reset_statistics(int argc, char **argv, void *userdata) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to issue ResetStatistics() varlink call: %m");
|
||||
|
||||
s = json_variant_by_key(reply, "success");
|
||||
if (!s)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
|
||||
"ResetStatistics() response is missing 'success' key.");
|
||||
|
||||
if (!FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF))
|
||||
return json_variant_dump(reply, arg_json_format_flags, NULL, NULL);
|
||||
|
||||
@ -3014,7 +3000,7 @@ static int dump_server_state(JsonVariant *server) {
|
||||
const char *verified_feature_level;
|
||||
const char *possible_feature_level;
|
||||
const char *dnssec_mode;
|
||||
bool can_do_dnssec;
|
||||
bool dnssec_supported;
|
||||
size_t received_udp_fragment_max;
|
||||
uint64_t n_failed_udp;
|
||||
uint64_t n_failed_tcp;
|
||||
@ -3028,21 +3014,21 @@ static int dump_server_state(JsonVariant *server) {
|
||||
int r;
|
||||
|
||||
static const JsonDispatch dispatch_table[] = {
|
||||
{ "server", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, server_name), JSON_MANDATORY },
|
||||
{ "type", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, type), JSON_MANDATORY },
|
||||
{ "interface", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, ifname), 0 },
|
||||
{ "verifiedFeatureLevel", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, verified_feature_level), 0 },
|
||||
{ "possibleFeatureLevel", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, possible_feature_level), 0 },
|
||||
{ "dnssecMode", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, dnssec_mode), JSON_MANDATORY },
|
||||
{ "canDoDNSSEC", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, can_do_dnssec), JSON_MANDATORY },
|
||||
{ "maxUDPFragmentSize", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(struct server_state, received_udp_fragment_max), JSON_MANDATORY },
|
||||
{ "failedUDPAttempts", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(struct server_state, n_failed_udp), JSON_MANDATORY },
|
||||
{ "failedTCPAttempts", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(struct server_state, n_failed_tcp), JSON_MANDATORY },
|
||||
{ "seenTruncatedPacket", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, packet_truncated), JSON_MANDATORY },
|
||||
{ "seenOPTRRGettingLost", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, packet_bad_opt), JSON_MANDATORY },
|
||||
{ "seenRRSIGRRMissing", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, packet_rrsig_missing), JSON_MANDATORY },
|
||||
{ "seenInvalidPacket", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, packet_invalid), JSON_MANDATORY },
|
||||
{ "serverDroppedDOFlag", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, packet_do_off), JSON_MANDATORY },
|
||||
{ "Server", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, server_name), JSON_MANDATORY },
|
||||
{ "Type", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, type), JSON_MANDATORY },
|
||||
{ "Interface", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, ifname), 0 },
|
||||
{ "VerifiedFeatureLevel", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, verified_feature_level), 0 },
|
||||
{ "PossibleFeatureLevel", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, possible_feature_level), 0 },
|
||||
{ "DNSSECMode", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(struct server_state, dnssec_mode), JSON_MANDATORY },
|
||||
{ "DNSSECSupported", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, dnssec_supported), JSON_MANDATORY },
|
||||
{ "ReceivedUDPFragmentMax", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(struct server_state, received_udp_fragment_max), JSON_MANDATORY },
|
||||
{ "FailedUDPAttempts", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(struct server_state, n_failed_udp), JSON_MANDATORY },
|
||||
{ "FailedTCPAttempts", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(struct server_state, n_failed_tcp), JSON_MANDATORY },
|
||||
{ "PacketTruncated", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, packet_truncated), JSON_MANDATORY },
|
||||
{ "PacketBadOpt", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, packet_bad_opt), JSON_MANDATORY },
|
||||
{ "PacketRRSIGMissing", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, packet_rrsig_missing), JSON_MANDATORY },
|
||||
{ "PacketInvalid", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, packet_invalid), JSON_MANDATORY },
|
||||
{ "PacketDoOff", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(struct server_state, packet_do_off), JSON_MANDATORY },
|
||||
{},
|
||||
};
|
||||
|
||||
@ -3098,8 +3084,8 @@ static int dump_server_state(JsonVariant *server) {
|
||||
r = table_add_many(table,
|
||||
TABLE_FIELD, "DNSSEC Mode",
|
||||
TABLE_STRING, server_state.dnssec_mode,
|
||||
TABLE_FIELD, "Can do DNSSEC",
|
||||
TABLE_STRING, yes_no(server_state.can_do_dnssec),
|
||||
TABLE_FIELD, "DNSSEC Supported",
|
||||
TABLE_STRING, yes_no(server_state.dnssec_supported),
|
||||
TABLE_FIELD, "Maximum UDP fragment size received",
|
||||
TABLE_UINT64, server_state.received_udp_fragment_max,
|
||||
TABLE_FIELD, "Failed UDP attempts",
|
||||
|
@ -1712,7 +1712,7 @@ static int bus_method_reset_statistics(sd_bus_message *message, void *userdata,
|
||||
|
||||
bus_client_log(message, "statistics reset");
|
||||
|
||||
dns_manager_reset_satistics(m);
|
||||
dns_manager_reset_statistics(m);
|
||||
|
||||
return sd_bus_reply_method_return(message, NULL);
|
||||
}
|
||||
|
@ -1103,19 +1103,19 @@ int dns_server_dump_state_to_json(DnsServer *server, JsonVariant **ret) {
|
||||
|
||||
return json_build(ret,
|
||||
JSON_BUILD_OBJECT(
|
||||
JSON_BUILD_PAIR_STRING("server", strna(dns_server_string_full(server))),
|
||||
JSON_BUILD_PAIR_STRING("type", strna(dns_server_type_to_string(server->type))),
|
||||
JSON_BUILD_PAIR_CONDITION(server->type == DNS_SERVER_LINK, "interface", JSON_BUILD_STRING(server->link ? server->link->ifname : NULL)),
|
||||
JSON_BUILD_PAIR_STRING("verifiedFeatureLevel", strna(dns_server_feature_level_to_string(server->verified_feature_level))),
|
||||
JSON_BUILD_PAIR_STRING("possibleFeatureLevel", strna(dns_server_feature_level_to_string(server->possible_feature_level))),
|
||||
JSON_BUILD_PAIR_STRING("dnssecMode", strna(dnssec_mode_to_string(dns_server_get_dnssec_mode(server)))),
|
||||
JSON_BUILD_PAIR_BOOLEAN("canDoDNSSEC", dns_server_dnssec_supported(server)),
|
||||
JSON_BUILD_PAIR_UNSIGNED("maxUDPFragmentSize", server->received_udp_fragment_max),
|
||||
JSON_BUILD_PAIR_UNSIGNED("failedUDPAttempts", server->n_failed_udp),
|
||||
JSON_BUILD_PAIR_UNSIGNED("failedTCPAttempts", server->n_failed_tcp),
|
||||
JSON_BUILD_PAIR_BOOLEAN("seenTruncatedPacket", server->packet_truncated),
|
||||
JSON_BUILD_PAIR_BOOLEAN("seenOPTRRGettingLost", server->packet_bad_opt),
|
||||
JSON_BUILD_PAIR_BOOLEAN("seenRRSIGRRMissing", server->packet_rrsig_missing),
|
||||
JSON_BUILD_PAIR_BOOLEAN("seenInvalidPacket", server->packet_invalid),
|
||||
JSON_BUILD_PAIR_BOOLEAN("serverDroppedDOFlag", server->packet_do_off)));
|
||||
JSON_BUILD_PAIR_STRING("Server", strna(dns_server_string_full(server))),
|
||||
JSON_BUILD_PAIR_STRING("Type", strna(dns_server_type_to_string(server->type))),
|
||||
JSON_BUILD_PAIR_CONDITION(server->type == DNS_SERVER_LINK, "Interface", JSON_BUILD_STRING(server->link ? server->link->ifname : NULL)),
|
||||
JSON_BUILD_PAIR_STRING("VerifiedFeatureLevel", strna(dns_server_feature_level_to_string(server->verified_feature_level))),
|
||||
JSON_BUILD_PAIR_STRING("PossibleFeatureLevel", strna(dns_server_feature_level_to_string(server->possible_feature_level))),
|
||||
JSON_BUILD_PAIR_STRING("DNSSECMode", strna(dnssec_mode_to_string(dns_server_get_dnssec_mode(server)))),
|
||||
JSON_BUILD_PAIR_BOOLEAN("DNSSECSupported", dns_server_dnssec_supported(server)),
|
||||
JSON_BUILD_PAIR_UNSIGNED("ReceivedUDPFragmentMax", server->received_udp_fragment_max),
|
||||
JSON_BUILD_PAIR_UNSIGNED("FailedUDPAttempts", server->n_failed_udp),
|
||||
JSON_BUILD_PAIR_UNSIGNED("FailedTCPAttempts", server->n_failed_tcp),
|
||||
JSON_BUILD_PAIR_BOOLEAN("PacketTruncated", server->packet_truncated),
|
||||
JSON_BUILD_PAIR_BOOLEAN("PacketBadOpt", server->packet_bad_opt),
|
||||
JSON_BUILD_PAIR_BOOLEAN("PacketRRSIGMissing", server->packet_rrsig_missing),
|
||||
JSON_BUILD_PAIR_BOOLEAN("PacketInvalid", server->packet_invalid),
|
||||
JSON_BUILD_PAIR_BOOLEAN("PacketDoOff", server->packet_do_off)));
|
||||
}
|
||||
|
@ -1835,7 +1835,7 @@ int dns_manager_dump_statistics_json(Manager *m, JsonVariant **ret) {
|
||||
))));
|
||||
}
|
||||
|
||||
void dns_manager_reset_satistics(Manager *m) {
|
||||
void dns_manager_reset_statistics(Manager *m) {
|
||||
|
||||
assert(m);
|
||||
|
||||
|
@ -227,4 +227,4 @@ int socket_disable_pmtud(int fd, int af);
|
||||
|
||||
int dns_manager_dump_statistics_json(Manager *m, JsonVariant **ret);
|
||||
|
||||
void dns_manager_reset_satistics(Manager *m);
|
||||
void dns_manager_reset_statistics(Manager *m);
|
||||
|
@ -670,8 +670,7 @@ static int vl_method_dump_statistics(Varlink *link, JsonVariant *parameters, Var
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return varlink_replyb(link, JSON_BUILD_OBJECT(
|
||||
JSON_BUILD_PAIR("statistics", JSON_BUILD_VARIANT(j))));
|
||||
return varlink_replyb(link, JSON_BUILD_VARIANT(j));
|
||||
}
|
||||
|
||||
static int vl_method_reset_statistics(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
|
||||
@ -684,10 +683,9 @@ static int vl_method_reset_statistics(Varlink *link, JsonVariant *parameters, Va
|
||||
|
||||
m = ASSERT_PTR(varlink_server_get_userdata(varlink_get_server(link)));
|
||||
|
||||
dns_manager_reset_satistics(m);
|
||||
dns_manager_reset_statistics(m);
|
||||
|
||||
return varlink_replyb(link, JSON_BUILD_OBJECT(
|
||||
JSON_BUILD_PAIR("success", JSON_BUILD_BOOLEAN(true))));
|
||||
return varlink_replyb(link, JSON_BUILD_EMPTY_OBJECT);
|
||||
}
|
||||
|
||||
static int varlink_monitor_server_init(Manager *m) {
|
||||
|
@ -600,11 +600,11 @@ grep -qF "Interface" "$RUN_OUT"
|
||||
|
||||
run resolvectl show-server-state --json=short
|
||||
grep -qF "10.0.0.1" "$RUN_OUT"
|
||||
grep -qF "interface" "$RUN_OUT"
|
||||
grep -qF "Interface" "$RUN_OUT"
|
||||
|
||||
run resolvectl show-server-state --json=pretty
|
||||
grep -qF "10.0.0.1" "$RUN_OUT"
|
||||
grep -qF "interface" "$RUN_OUT"
|
||||
grep -qF "Interface" "$RUN_OUT"
|
||||
|
||||
### Test resolvectl statistics ###
|
||||
run resolvectl statistics
|
||||
@ -627,11 +627,7 @@ grep -qF "dnssec" "$RUN_OUT"
|
||||
run resolvectl reset-statistics
|
||||
|
||||
run resolvectl reset-statistics --json=pretty
|
||||
grep -qF "success" "$RUN_OUT"
|
||||
grep -qF "true" "$RUN_OUT"
|
||||
|
||||
run resolvectl reset-statistics --json=short
|
||||
grep -qF "success" "$RUN_OUT"
|
||||
grep -qF "true" "$RUN_OUT"
|
||||
|
||||
touch /testok
|
||||
|
Loading…
x
Reference in New Issue
Block a user