mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-17 20:03:10 -06:00
Move prometheus stuff into separate file
This commit is contained in:
parent
9be7134727
commit
78ef720a03
103
roomserver/state/v1/prometheus.go
Normal file
103
roomserver/state/v1/prometheus.go
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/matrix-org/dendrite/roomserver/types"
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
)
|
||||||
|
|
||||||
|
var calculateStateDurations = prometheus.NewSummaryVec(
|
||||||
|
prometheus.SummaryOpts{
|
||||||
|
Namespace: "dendrite",
|
||||||
|
Subsystem: "roomserver",
|
||||||
|
Name: "calculate_state_duration_microseconds",
|
||||||
|
Help: "How long it takes to calculate the state after a list of events",
|
||||||
|
},
|
||||||
|
// Takes two labels:
|
||||||
|
// algorithm:
|
||||||
|
// The algorithm used to calculate the state or the step it failed on if it failed.
|
||||||
|
// Labels starting with "_" are used to indicate when the algorithm fails halfway.
|
||||||
|
// outcome:
|
||||||
|
// Whether the state was successfully calculated.
|
||||||
|
//
|
||||||
|
// The possible values for algorithm are:
|
||||||
|
// empty_state -> The list of events was empty so the state is empty.
|
||||||
|
// no_change -> The state hasn't changed.
|
||||||
|
// single_delta -> There was a single event added to the state in a way that can be encoded as a single delta
|
||||||
|
// full_state_no_conflicts -> We created a new copy of the full room state, but didn't enounter any conflicts
|
||||||
|
// while doing so.
|
||||||
|
// full_state_with_conflicts -> We created a new copy of the full room state and had to resolve conflicts to do so.
|
||||||
|
// _load_state_block_nids -> Failed loading the state block nids for a single previous state.
|
||||||
|
// _load_combined_state -> Failed to load the combined state.
|
||||||
|
// _resolve_conflicts -> Failed to resolve conflicts.
|
||||||
|
[]string{"algorithm", "outcome"},
|
||||||
|
)
|
||||||
|
|
||||||
|
var calculateStatePrevEventLength = prometheus.NewSummaryVec(
|
||||||
|
prometheus.SummaryOpts{
|
||||||
|
Namespace: "dendrite",
|
||||||
|
Subsystem: "roomserver",
|
||||||
|
Name: "calculate_state_prev_event_length",
|
||||||
|
Help: "The length of the list of events to calculate the state after",
|
||||||
|
},
|
||||||
|
[]string{"algorithm", "outcome"},
|
||||||
|
)
|
||||||
|
|
||||||
|
var calculateStateFullStateLength = prometheus.NewSummaryVec(
|
||||||
|
prometheus.SummaryOpts{
|
||||||
|
Namespace: "dendrite",
|
||||||
|
Subsystem: "roomserver",
|
||||||
|
Name: "calculate_state_full_state_length",
|
||||||
|
Help: "The length of the full room state.",
|
||||||
|
},
|
||||||
|
[]string{"algorithm", "outcome"},
|
||||||
|
)
|
||||||
|
|
||||||
|
var calculateStateConflictLength = prometheus.NewSummaryVec(
|
||||||
|
prometheus.SummaryOpts{
|
||||||
|
Namespace: "dendrite",
|
||||||
|
Subsystem: "roomserver",
|
||||||
|
Name: "calculate_state_conflict_state_length",
|
||||||
|
Help: "The length of the conflicted room state.",
|
||||||
|
},
|
||||||
|
[]string{"algorithm", "outcome"},
|
||||||
|
)
|
||||||
|
|
||||||
|
type calculateStateMetrics struct {
|
||||||
|
algorithm string
|
||||||
|
startTime time.Time
|
||||||
|
prevEventLength int
|
||||||
|
fullStateLength int
|
||||||
|
conflictLength int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *calculateStateMetrics) stop(stateNID types.StateSnapshotNID, err error) (types.StateSnapshotNID, error) {
|
||||||
|
var outcome string
|
||||||
|
if err == nil {
|
||||||
|
outcome = "success"
|
||||||
|
} else {
|
||||||
|
outcome = "failure"
|
||||||
|
}
|
||||||
|
endTime := time.Now()
|
||||||
|
calculateStateDurations.WithLabelValues(c.algorithm, outcome).Observe(
|
||||||
|
float64(endTime.Sub(c.startTime).Nanoseconds()) / 1000.,
|
||||||
|
)
|
||||||
|
calculateStatePrevEventLength.WithLabelValues(c.algorithm, outcome).Observe(
|
||||||
|
float64(c.prevEventLength),
|
||||||
|
)
|
||||||
|
calculateStateFullStateLength.WithLabelValues(c.algorithm, outcome).Observe(
|
||||||
|
float64(c.fullStateLength),
|
||||||
|
)
|
||||||
|
calculateStateConflictLength.WithLabelValues(c.algorithm, outcome).Observe(
|
||||||
|
float64(c.conflictLength),
|
||||||
|
)
|
||||||
|
return stateNID, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
prometheus.MustRegister(
|
||||||
|
calculateStateDurations, calculateStatePrevEventLength,
|
||||||
|
calculateStateFullStateLength, calculateStateConflictLength,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
@ -27,7 +27,6 @@ import (
|
||||||
"github.com/matrix-org/dendrite/roomserver/types"
|
"github.com/matrix-org/dendrite/roomserver/types"
|
||||||
"github.com/matrix-org/gomatrixserverlib"
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
"github.com/matrix-org/util"
|
"github.com/matrix-org/util"
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type StateResolutionV1 struct {
|
type StateResolutionV1 struct {
|
||||||
|
|
@ -411,101 +410,6 @@ func (v StateResolutionV1) loadStateAfterEventsForNumericTuples(
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var calculateStateDurations = prometheus.NewSummaryVec(
|
|
||||||
prometheus.SummaryOpts{
|
|
||||||
Namespace: "dendrite",
|
|
||||||
Subsystem: "roomserver",
|
|
||||||
Name: "calculate_state_duration_microseconds",
|
|
||||||
Help: "How long it takes to calculate the state after a list of events",
|
|
||||||
},
|
|
||||||
// Takes two labels:
|
|
||||||
// algorithm:
|
|
||||||
// The algorithm used to calculate the state or the step it failed on if it failed.
|
|
||||||
// Labels starting with "_" are used to indicate when the algorithm fails halfway.
|
|
||||||
// outcome:
|
|
||||||
// Whether the state was successfully calculated.
|
|
||||||
//
|
|
||||||
// The possible values for algorithm are:
|
|
||||||
// empty_state -> The list of events was empty so the state is empty.
|
|
||||||
// no_change -> The state hasn't changed.
|
|
||||||
// single_delta -> There was a single event added to the state in a way that can be encoded as a single delta
|
|
||||||
// full_state_no_conflicts -> We created a new copy of the full room state, but didn't enounter any conflicts
|
|
||||||
// while doing so.
|
|
||||||
// full_state_with_conflicts -> We created a new copy of the full room state and had to resolve conflicts to do so.
|
|
||||||
// _load_state_block_nids -> Failed loading the state block nids for a single previous state.
|
|
||||||
// _load_combined_state -> Failed to load the combined state.
|
|
||||||
// _resolve_conflicts -> Failed to resolve conflicts.
|
|
||||||
[]string{"algorithm", "outcome"},
|
|
||||||
)
|
|
||||||
|
|
||||||
var calculateStatePrevEventLength = prometheus.NewSummaryVec(
|
|
||||||
prometheus.SummaryOpts{
|
|
||||||
Namespace: "dendrite",
|
|
||||||
Subsystem: "roomserver",
|
|
||||||
Name: "calculate_state_prev_event_length",
|
|
||||||
Help: "The length of the list of events to calculate the state after",
|
|
||||||
},
|
|
||||||
[]string{"algorithm", "outcome"},
|
|
||||||
)
|
|
||||||
|
|
||||||
var calculateStateFullStateLength = prometheus.NewSummaryVec(
|
|
||||||
prometheus.SummaryOpts{
|
|
||||||
Namespace: "dendrite",
|
|
||||||
Subsystem: "roomserver",
|
|
||||||
Name: "calculate_state_full_state_length",
|
|
||||||
Help: "The length of the full room state.",
|
|
||||||
},
|
|
||||||
[]string{"algorithm", "outcome"},
|
|
||||||
)
|
|
||||||
|
|
||||||
var calculateStateConflictLength = prometheus.NewSummaryVec(
|
|
||||||
prometheus.SummaryOpts{
|
|
||||||
Namespace: "dendrite",
|
|
||||||
Subsystem: "roomserver",
|
|
||||||
Name: "calculate_state_conflict_state_length",
|
|
||||||
Help: "The length of the conflicted room state.",
|
|
||||||
},
|
|
||||||
[]string{"algorithm", "outcome"},
|
|
||||||
)
|
|
||||||
|
|
||||||
type calculateStateMetrics struct {
|
|
||||||
algorithm string
|
|
||||||
startTime time.Time
|
|
||||||
prevEventLength int
|
|
||||||
fullStateLength int
|
|
||||||
conflictLength int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *calculateStateMetrics) stop(stateNID types.StateSnapshotNID, err error) (types.StateSnapshotNID, error) {
|
|
||||||
var outcome string
|
|
||||||
if err == nil {
|
|
||||||
outcome = "success"
|
|
||||||
} else {
|
|
||||||
outcome = "failure"
|
|
||||||
}
|
|
||||||
endTime := time.Now()
|
|
||||||
calculateStateDurations.WithLabelValues(c.algorithm, outcome).Observe(
|
|
||||||
float64(endTime.Sub(c.startTime).Nanoseconds()) / 1000.,
|
|
||||||
)
|
|
||||||
calculateStatePrevEventLength.WithLabelValues(c.algorithm, outcome).Observe(
|
|
||||||
float64(c.prevEventLength),
|
|
||||||
)
|
|
||||||
calculateStateFullStateLength.WithLabelValues(c.algorithm, outcome).Observe(
|
|
||||||
float64(c.fullStateLength),
|
|
||||||
)
|
|
||||||
calculateStateConflictLength.WithLabelValues(c.algorithm, outcome).Observe(
|
|
||||||
float64(c.conflictLength),
|
|
||||||
)
|
|
||||||
return stateNID, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
prometheus.MustRegister(
|
|
||||||
calculateStateDurations, calculateStatePrevEventLength,
|
|
||||||
calculateStateFullStateLength, calculateStateConflictLength,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CalculateAndStoreStateBeforeEvent calculates a snapshot of the state of a room before an event.
|
// CalculateAndStoreStateBeforeEvent calculates a snapshot of the state of a room before an event.
|
||||||
// Stores the snapshot of the state in the database.
|
// Stores the snapshot of the state in the database.
|
||||||
// Returns a numeric ID for the snapshot of the state before the event.
|
// Returns a numeric ID for the snapshot of the state before the event.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue