# DTO Model


message MetricList {
    repeated Metric metrics = 2;
}

message Metric {
    string namespace = 1;
    string name = 2;
    int64 timestamp = 3;
    repeated KeyValue tags = 4;
    // xxhash.Sum64String(tags), broker side generate before write wal
    uint64 tags_hash = 5;
    repeated SimpleField simple_fields = 6;
    CompoundField compound_field = 7;
}

enum SimpleFieldType {
    SIMPLE_UNSPECIFIED = 0;
    GAUGE = 1;
    DELTA_SUM = 2;
    CUMULATIVE_SUM = 3;
}

enum CompoundFieldType {
    COMPOUND_UNSPECIFIED = 0;
    DELTA_HISTOGRAM = 1;
    CUMULATIVE_HISTOGRAM = 2;
}

message SimpleField {
    string name = 1;
    SimpleFieldType type = 2;
    repeated Exemplar exemplars = 3;
    double value = 4;
}

// CompoundData is compound data used for histogram field.
message CompoundField {
    CompoundFieldType type = 1;
    repeated Exemplar exemplars = 2;
    double min = 3;
    double max = 4;
    double sum = 5;
    double count = 6;
    // same as open-telemetry metrics definition
    // explicit_bounds specifies buckets with explicitly defined bounds for values.
    //
    // The boundaries for bucket at index i are:
    //
    // (-infinity, explicit_bounds[i]] for i == 0
    // (explicit_bounds[i-1], explicit_bounds[i]] for 0 < i < size(explicit_bounds)
    // (explicit_bounds[i-1], +infinity) for i == size(explicit_bounds)
    //
    // The values in the explicit_bounds array must be strictly increasing.
    //
    // Histogram buckets are inclusive of their upper boundary, except the last
    // bucket where the boundary is at infinity. This format is intentionally
    // compatible with the OpenMetrics histogram definition.
    repeated double explicit_bounds = 7;
    repeated double values = 8;
}