On Tue, Oct 18, 2022 at 01:08:55PM +0200, Claudio Jeker wrote: > As mentioned I think having metric values that depend on session state is > not ideal. Introduce 'bgpd_peer_last_change_seconds' which is the last > time the session up/down state changed. It does not track every state > change only when a session goes in and out of ESTABLISHED state. > This replaces bgpd_peer_up_seconds and bgpd_peer_down_seconds.
Makes sense. ok tb > > -- > :wq Claudio > > Index: output_ometric.c > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpctl/output_ometric.c,v > retrieving revision 1.1 > diff -u -p -r1.1 output_ometric.c > --- output_ometric.c 17 Oct 2022 12:01:19 -0000 1.1 > +++ output_ometric.c 18 Oct 2022 11:03:04 -0000 > @@ -33,8 +33,8 @@ > #include "ometric.h" > > struct ometric *bgpd_info, *bgpd_scrape_time; > -struct ometric *peer_info, *peer_state, *peer_state_raw, *peer_up_time, > - *peer_down_time, *peer_last_read, *peer_last_write; > +struct ometric *peer_info, *peer_state, *peer_state_raw, *peer_last_change, > + *peer_last_read, *peer_last_write; > struct ometric *peer_prefixes_transmit, *peer_prefixes_receive; > struct ometric *peer_message_transmit, *peer_message_recieve; > struct ometric *peer_update_transmit, *peer_update_pending, > @@ -91,10 +91,9 @@ ometric_head(struct parse_result *arg) > "peer session state"); > peer_state_raw = ometric_new(OMT_GAUGE, "bgpd_peer_state_raw", > "peer session state raw int value"); > - peer_up_time = ometric_new(OMT_GAUGE, "bgpd_peer_up_seconds", > - "peer session up time in seconds"); > - peer_down_time = ometric_new(OMT_GAUGE, "bgpd_peer_down_seconds", > - "peer session down time in seconds"); > + peer_last_change = ometric_new(OMT_GAUGE, > + "bgpd_peer_last_change_seconds", > + "time in seconds since peer's last up/down state change"); > peer_last_read = ometric_new(OMT_GAUGE, "bgpd_peer_last_read_seconds", > "peer time since last read in seconds"); > peer_last_write = ometric_new(OMT_GAUGE, "bgpd_peer_last_write_seconds", > @@ -193,16 +192,15 @@ ometric_neighbor_stats(struct peer *p, s > ometric_set_state(peer_state, statenames[p->state], ol); > ometric_set_int(peer_state_raw, p->state, ol); > > + ometric_set_int(peer_last_change, get_monotime(p->stats.last_updown), > + ol); > + > if (p->state == STATE_ESTABLISHED) { > - ometric_set_int(peer_up_time, > - get_monotime(p->stats.last_updown), ol); > ometric_set_int(peer_last_read, > get_monotime(p->stats.last_read), ol); > ometric_set_int(peer_last_write, > get_monotime(p->stats.last_write), ol); > - } else if (p->stats.last_updown != 0) > - ometric_set_int(peer_down_time, > - get_monotime(p->stats.last_updown), ol); > + } > > ometric_set_int(peer_prefixes_transmit, p->stats.prefix_out_cnt, ol); > ometric_set_int(peer_prefixes_receive, p->stats.prefix_cnt, ol); >