mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-25 05:34:05 -08:00
Merge branch 'release-2.54' into merge-2.54.1-into-main
This commit is contained in:
commit
4202be5e79
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -6,7 +6,15 @@
|
||||||
* [ENHANCEMENT] OTLP receiver: Warn when encountering exponential histograms with zero count and non-zero sum. #14706
|
* [ENHANCEMENT] OTLP receiver: Warn when encountering exponential histograms with zero count and non-zero sum. #14706
|
||||||
* [BUGFIX] tsdb/wlog.Watcher.readSegmentForGC: Only count unknown record types against record_decode_failures_total metric. #14042
|
* [BUGFIX] tsdb/wlog.Watcher.readSegmentForGC: Only count unknown record types against record_decode_failures_total metric. #14042
|
||||||
|
|
||||||
## 2.54.0-rc.1 / 2024-08-05
|
## 2.54.1 / 2024-08-27
|
||||||
|
|
||||||
|
* [BUGFIX] Scraping: allow multiple samples on same series, with explicit timestamps. #14685
|
||||||
|
* [BUGFIX] Docker SD: fix crash in `match_first_network` mode when container is reconnected to a new network. #14654
|
||||||
|
* [BUGFIX] PromQL: fix experimental native histograms getting corrupted due to vector selector bug in range queries. #14538
|
||||||
|
* [BUGFIX] PromQL: fix experimental native histogram counter reset detection on stale samples. #14514
|
||||||
|
* [BUGFIX] PromQL: fix native histograms getting corrupted due to vector selector bug in range queries. #14605
|
||||||
|
|
||||||
|
## 2.54.0 / 2024-08-09
|
||||||
|
|
||||||
Release 2.54 brings a release candidate of a major new version of [Remote Write: 2.0](https://prometheus.io/docs/specs/remote_write_spec_2_0/).
|
Release 2.54 brings a release candidate of a major new version of [Remote Write: 2.0](https://prometheus.io/docs/specs/remote_write_spec_2_0/).
|
||||||
This is experimental at this time and may still change.
|
This is experimental at this time and may still change.
|
||||||
|
@ -35,6 +43,7 @@ Remote-write v2 is enabled by default, but can be disabled via feature-flag `web
|
||||||
* [ENHANCEMENT] Notifier: Send any outstanding Alertmanager notifications when shutting down. #14290
|
* [ENHANCEMENT] Notifier: Send any outstanding Alertmanager notifications when shutting down. #14290
|
||||||
* [ENHANCEMENT] Rules: Add label-matcher support to Rules API. #10194
|
* [ENHANCEMENT] Rules: Add label-matcher support to Rules API. #10194
|
||||||
* [ENHANCEMENT] HTTP API: Add url to message logged on error while sending response. #14209
|
* [ENHANCEMENT] HTTP API: Add url to message logged on error while sending response. #14209
|
||||||
|
* [BUGFIX] TSDB: Exclude OOO chunks mapped after compaction starts (introduced by #14396). #14584
|
||||||
* [BUGFIX] CLI: escape `|` characters when generating docs. #14420
|
* [BUGFIX] CLI: escape `|` characters when generating docs. #14420
|
||||||
* [BUGFIX] PromQL (experimental native histograms): Fix some binary operators between native histogram values. #14454
|
* [BUGFIX] PromQL (experimental native histograms): Fix some binary operators between native histogram values. #14454
|
||||||
* [BUGFIX] TSDB: LabelNames API could fail during compaction. #14279
|
* [BUGFIX] TSDB: LabelNames API could fail during compaction. #14279
|
||||||
|
|
|
@ -19,6 +19,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -251,28 +252,26 @@ func (d *DockerDiscovery) refresh(ctx context.Context) ([]*targetgroup.Group, er
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.matchFirstNetwork && len(networks) > 1 {
|
if d.matchFirstNetwork && len(networks) > 1 {
|
||||||
// Match user defined network
|
// Sort networks by name and take first non-nil network.
|
||||||
if containerNetworkMode.IsUserDefined() {
|
keys := make([]string, 0, len(networks))
|
||||||
networkMode := string(containerNetworkMode)
|
for k, n := range networks {
|
||||||
networks = map[string]*network.EndpointSettings{networkMode: networks[networkMode]}
|
if n != nil {
|
||||||
} else {
|
keys = append(keys, k)
|
||||||
// Get first network if container network mode has "none" value.
|
|
||||||
// This case appears under certain condition:
|
|
||||||
// 1. Container created with network set to "--net=none".
|
|
||||||
// 2. Disconnect network "none".
|
|
||||||
// 3. Reconnect network with user defined networks.
|
|
||||||
var first string
|
|
||||||
for k, n := range networks {
|
|
||||||
if n != nil {
|
|
||||||
first = k
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
networks = map[string]*network.EndpointSettings{first: networks[first]}
|
}
|
||||||
|
if len(keys) > 0 {
|
||||||
|
sort.Strings(keys)
|
||||||
|
firstNetworkMode := keys[0]
|
||||||
|
firstNetwork := networks[firstNetworkMode]
|
||||||
|
networks = map[string]*network.EndpointSettings{firstNetworkMode: firstNetwork}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, n := range networks {
|
for _, n := range networks {
|
||||||
|
if n == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
var added bool
|
var added bool
|
||||||
|
|
||||||
for _, p := range c.Ports {
|
for _, p := range c.Ports {
|
||||||
|
|
|
@ -60,9 +60,9 @@ host: %s
|
||||||
tg := tgs[0]
|
tg := tgs[0]
|
||||||
require.NotNil(t, tg)
|
require.NotNil(t, tg)
|
||||||
require.NotNil(t, tg.Targets)
|
require.NotNil(t, tg.Targets)
|
||||||
require.Len(t, tg.Targets, 6)
|
require.Len(t, tg.Targets, 8)
|
||||||
|
|
||||||
for i, lbls := range []model.LabelSet{
|
expected := []model.LabelSet{
|
||||||
{
|
{
|
||||||
"__address__": "172.19.0.2:9100",
|
"__address__": "172.19.0.2:9100",
|
||||||
"__meta_docker_container_id": "c301b928faceb1a18fe379f6bc178727ef920bb30b0f9b8592b32b36255a0eca",
|
"__meta_docker_container_id": "c301b928faceb1a18fe379f6bc178727ef920bb30b0f9b8592b32b36255a0eca",
|
||||||
|
@ -163,7 +163,43 @@ host: %s
|
||||||
"__meta_docker_network_scope": "local",
|
"__meta_docker_network_scope": "local",
|
||||||
"__meta_docker_port_private": "9104",
|
"__meta_docker_port_private": "9104",
|
||||||
},
|
},
|
||||||
} {
|
{
|
||||||
|
"__address__": "172.20.0.3:3306",
|
||||||
|
"__meta_docker_container_id": "f84b2a0cfaa58d9e70b0657e2b3c6f44f0e973de4163a871299b4acf127b224f",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_multi_networks",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private_none",
|
||||||
|
"__meta_docker_network_id": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.20.0.3",
|
||||||
|
"__meta_docker_network_name": "dockersd_private",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "3306",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.20.0.3:33060",
|
||||||
|
"__meta_docker_container_id": "f84b2a0cfaa58d9e70b0657e2b3c6f44f0e973de4163a871299b4acf127b224f",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_multi_networks",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private_none",
|
||||||
|
"__meta_docker_network_id": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.20.0.3",
|
||||||
|
"__meta_docker_network_name": "dockersd_private",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "33060",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
sortFunc(expected)
|
||||||
|
sortFunc(tg.Targets)
|
||||||
|
|
||||||
|
for i, lbls := range expected {
|
||||||
t.Run(fmt.Sprintf("item %d", i), func(t *testing.T) {
|
t.Run(fmt.Sprintf("item %d", i), func(t *testing.T) {
|
||||||
require.Equal(t, lbls, tg.Targets[i])
|
require.Equal(t, lbls, tg.Targets[i])
|
||||||
})
|
})
|
||||||
|
@ -202,13 +238,8 @@ host: %s
|
||||||
tg := tgs[0]
|
tg := tgs[0]
|
||||||
require.NotNil(t, tg)
|
require.NotNil(t, tg)
|
||||||
require.NotNil(t, tg.Targets)
|
require.NotNil(t, tg.Targets)
|
||||||
require.Len(t, tg.Targets, 9)
|
require.Len(t, tg.Targets, 13)
|
||||||
|
|
||||||
sortFunc := func(labelSets []model.LabelSet) {
|
|
||||||
sort.Slice(labelSets, func(i, j int) bool {
|
|
||||||
return labelSets[i]["__address__"] < labelSets[j]["__address__"]
|
|
||||||
})
|
|
||||||
}
|
|
||||||
expected := []model.LabelSet{
|
expected := []model.LabelSet{
|
||||||
{
|
{
|
||||||
"__address__": "172.19.0.2:9100",
|
"__address__": "172.19.0.2:9100",
|
||||||
|
@ -359,6 +390,70 @@ host: %s
|
||||||
"__meta_docker_network_scope": "local",
|
"__meta_docker_network_scope": "local",
|
||||||
"__meta_docker_port_private": "9104",
|
"__meta_docker_port_private": "9104",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.20.0.3:3306",
|
||||||
|
"__meta_docker_container_id": "f84b2a0cfaa58d9e70b0657e2b3c6f44f0e973de4163a871299b4acf127b224f",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_multi_networks",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private_none",
|
||||||
|
"__meta_docker_network_id": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.20.0.3",
|
||||||
|
"__meta_docker_network_name": "dockersd_private",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "3306",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.20.0.3:33060",
|
||||||
|
"__meta_docker_container_id": "f84b2a0cfaa58d9e70b0657e2b3c6f44f0e973de4163a871299b4acf127b224f",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_multi_networks",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private_none",
|
||||||
|
"__meta_docker_network_id": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.20.0.3",
|
||||||
|
"__meta_docker_network_name": "dockersd_private",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "33060",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.21.0.3:3306",
|
||||||
|
"__meta_docker_container_id": "f84b2a0cfaa58d9e70b0657e2b3c6f44f0e973de4163a871299b4acf127b224f",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_multi_networks",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private_none",
|
||||||
|
"__meta_docker_network_id": "bfcf66a6b64f7d518f009e34290dc3f3c66a08164257ad1afc3bd31d75f656e8",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.21.0.3",
|
||||||
|
"__meta_docker_network_name": "dockersd_private1",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "3306",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__address__": "172.21.0.3:33060",
|
||||||
|
"__meta_docker_container_id": "f84b2a0cfaa58d9e70b0657e2b3c6f44f0e973de4163a871299b4acf127b224f",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_project": "dockersd",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_service": "mysql",
|
||||||
|
"__meta_docker_container_label_com_docker_compose_version": "2.2.2",
|
||||||
|
"__meta_docker_container_name": "/dockersd_multi_networks",
|
||||||
|
"__meta_docker_container_network_mode": "dockersd_private_none",
|
||||||
|
"__meta_docker_network_id": "bfcf66a6b64f7d518f009e34290dc3f3c66a08164257ad1afc3bd31d75f656e8",
|
||||||
|
"__meta_docker_network_ingress": "false",
|
||||||
|
"__meta_docker_network_internal": "false",
|
||||||
|
"__meta_docker_network_ip": "172.21.0.3",
|
||||||
|
"__meta_docker_network_name": "dockersd_private1",
|
||||||
|
"__meta_docker_network_scope": "local",
|
||||||
|
"__meta_docker_port_private": "33060",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
sortFunc(expected)
|
sortFunc(expected)
|
||||||
|
@ -370,3 +465,9 @@ host: %s
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func sortFunc(labelSets []model.LabelSet) {
|
||||||
|
sort.Slice(labelSets, func(i, j int) bool {
|
||||||
|
return labelSets[i]["__address__"] < labelSets[j]["__address__"]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -228,5 +228,74 @@
|
||||||
"Networks": {}
|
"Networks": {}
|
||||||
},
|
},
|
||||||
"Mounts": []
|
"Mounts": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Id": "f84b2a0cfaa58d9e70b0657e2b3c6f44f0e973de4163a871299b4acf127b224f",
|
||||||
|
"Names": [
|
||||||
|
"/dockersd_multi_networks"
|
||||||
|
],
|
||||||
|
"Image": "mysql:5.7.29",
|
||||||
|
"ImageID": "sha256:16ae2f4625ba63a250462bedeece422e741de9f0caf3b1d89fd5b257aca80cd1",
|
||||||
|
"Command": "mysqld",
|
||||||
|
"Created": 1616273136,
|
||||||
|
"Ports": [
|
||||||
|
{
|
||||||
|
"PrivatePort": 3306,
|
||||||
|
"Type": "tcp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"PrivatePort": 33060,
|
||||||
|
"Type": "tcp"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Labels": {
|
||||||
|
"com.docker.compose.project": "dockersd",
|
||||||
|
"com.docker.compose.service": "mysql",
|
||||||
|
"com.docker.compose.version": "2.2.2"
|
||||||
|
},
|
||||||
|
"State": "running",
|
||||||
|
"Status": "Up 40 seconds",
|
||||||
|
"HostConfig": {
|
||||||
|
"NetworkMode": "dockersd_private_none"
|
||||||
|
},
|
||||||
|
"NetworkSettings": {
|
||||||
|
"Networks": {
|
||||||
|
"dockersd_private": {
|
||||||
|
"IPAMConfig": null,
|
||||||
|
"Links": null,
|
||||||
|
"Aliases": null,
|
||||||
|
"NetworkID": "e804771e55254a360fdb70dfdd78d3610fdde231b14ef2f837a00ac1eeb9e601",
|
||||||
|
"EndpointID": "972d6807997369605ace863af58de6cb90c787a5bf2ffc4105662d393ae539b7",
|
||||||
|
"Gateway": "172.20.0.1",
|
||||||
|
"IPAddress": "172.20.0.3",
|
||||||
|
"IPPrefixLen": 16,
|
||||||
|
"IPv6Gateway": "",
|
||||||
|
"GlobalIPv6Address": "",
|
||||||
|
"GlobalIPv6PrefixLen": 0,
|
||||||
|
"MacAddress": "02:42:ac:14:00:02",
|
||||||
|
"DriverOpts": null
|
||||||
|
},
|
||||||
|
"dockersd_private1": {
|
||||||
|
"IPAMConfig": {},
|
||||||
|
"Links": null,
|
||||||
|
"Aliases": [
|
||||||
|
"mysql",
|
||||||
|
"mysql",
|
||||||
|
"f9ade4b83199"
|
||||||
|
],
|
||||||
|
"NetworkID": "bfcf66a6b64f7d518f009e34290dc3f3c66a08164257ad1afc3bd31d75f656e8",
|
||||||
|
"EndpointID": "91a98405344ee1cb7d977cafabe634837876651544b32da20a5e0155868e6f5f",
|
||||||
|
"Gateway": "172.21.0.1",
|
||||||
|
"IPAddress": "172.21.0.3",
|
||||||
|
"IPPrefixLen": 24,
|
||||||
|
"IPv6Gateway": "",
|
||||||
|
"GlobalIPv6Address": "",
|
||||||
|
"GlobalIPv6PrefixLen": 0,
|
||||||
|
"MacAddress": "02:42:ac:15:00:02",
|
||||||
|
"DriverOpts": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Mounts": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -957,7 +957,9 @@ tls_config:
|
||||||
# The host to use if the container is in host networking mode.
|
# The host to use if the container is in host networking mode.
|
||||||
[ host_networking_host: <string> | default = "localhost" ]
|
[ host_networking_host: <string> | default = "localhost" ]
|
||||||
|
|
||||||
# Match the first network if the container has multiple networks defined, thus avoiding collecting duplicate targets.
|
# Sort all non-nil networks in ascending order based on network name and
|
||||||
|
# get the first network if the container has multiple networks defined,
|
||||||
|
# thus avoiding collecting duplicate targets.
|
||||||
[ match_first_network: <boolean> | default = true ]
|
[ match_first_network: <boolean> | default = true ]
|
||||||
|
|
||||||
# Optional filters to limit the discovery process to a subset of available
|
# Optional filters to limit the discovery process to a subset of available
|
||||||
|
|
|
@ -1646,7 +1646,7 @@ loop:
|
||||||
updateMetadata(lset, true)
|
updateMetadata(lset, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
if seriesAlreadyScraped {
|
if seriesAlreadyScraped && parsedTimestamp == nil {
|
||||||
err = storage.ErrDuplicateSampleForTimestamp
|
err = storage.ErrDuplicateSampleForTimestamp
|
||||||
} else {
|
} else {
|
||||||
if ctMs := p.CreatedTimestamp(); sl.enableCTZeroIngestion && ctMs != nil {
|
if ctMs := p.CreatedTimestamp(); sl.enableCTZeroIngestion && ctMs != nil {
|
||||||
|
|
|
@ -35,6 +35,7 @@ import (
|
||||||
"github.com/gogo/protobuf/proto"
|
"github.com/gogo/protobuf/proto"
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
prom_testutil "github.com/prometheus/client_golang/prometheus/testutil"
|
||||||
dto "github.com/prometheus/client_model/go"
|
dto "github.com/prometheus/client_model/go"
|
||||||
config_util "github.com/prometheus/common/config"
|
config_util "github.com/prometheus/common/config"
|
||||||
"github.com/prometheus/common/model"
|
"github.com/prometheus/common/model"
|
||||||
|
@ -3644,6 +3645,7 @@ func TestScrapeLoopSeriesAddedDuplicates(t *testing.T) {
|
||||||
require.Equal(t, 3, total)
|
require.Equal(t, 3, total)
|
||||||
require.Equal(t, 3, added)
|
require.Equal(t, 3, added)
|
||||||
require.Equal(t, 1, seriesAdded)
|
require.Equal(t, 1, seriesAdded)
|
||||||
|
require.Equal(t, 2.0, prom_testutil.ToFloat64(sl.metrics.targetScrapeSampleDuplicate))
|
||||||
|
|
||||||
slApp = sl.appender(ctx)
|
slApp = sl.appender(ctx)
|
||||||
total, added, seriesAdded, err = sl.append(slApp, []byte("test_metric 1\ntest_metric 1\ntest_metric 1\n"), "", time.Time{})
|
total, added, seriesAdded, err = sl.append(slApp, []byte("test_metric 1\ntest_metric 1\ntest_metric 1\n"), "", time.Time{})
|
||||||
|
@ -3652,12 +3654,18 @@ func TestScrapeLoopSeriesAddedDuplicates(t *testing.T) {
|
||||||
require.Equal(t, 3, total)
|
require.Equal(t, 3, total)
|
||||||
require.Equal(t, 3, added)
|
require.Equal(t, 3, added)
|
||||||
require.Equal(t, 0, seriesAdded)
|
require.Equal(t, 0, seriesAdded)
|
||||||
|
require.Equal(t, 4.0, prom_testutil.ToFloat64(sl.metrics.targetScrapeSampleDuplicate))
|
||||||
|
|
||||||
metric := dto.Metric{}
|
// When different timestamps are supplied, multiple samples are accepted.
|
||||||
err = sl.metrics.targetScrapeSampleDuplicate.Write(&metric)
|
slApp = sl.appender(ctx)
|
||||||
|
total, added, seriesAdded, err = sl.append(slApp, []byte("test_metric 1 1001\ntest_metric 1 1002\ntest_metric 1 1003\n"), "", time.Time{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
value := metric.GetCounter().GetValue()
|
require.NoError(t, slApp.Commit())
|
||||||
require.Equal(t, 4.0, value)
|
require.Equal(t, 3, total)
|
||||||
|
require.Equal(t, 3, added)
|
||||||
|
require.Equal(t, 0, seriesAdded)
|
||||||
|
// Metric is not higher than last time.
|
||||||
|
require.Equal(t, 4.0, prom_testutil.ToFloat64(sl.metrics.targetScrapeSampleDuplicate))
|
||||||
}
|
}
|
||||||
|
|
||||||
// This tests running a full scrape loop and checking that the scrape option
|
// This tests running a full scrape loop and checking that the scrape option
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@prometheus-io/codemirror-promql",
|
"name": "@prometheus-io/codemirror-promql",
|
||||||
"version": "0.54.0-rc.1",
|
"version": "0.54.1",
|
||||||
"description": "a CodeMirror mode for the PromQL language",
|
"description": "a CodeMirror mode for the PromQL language",
|
||||||
"types": "dist/esm/index.d.ts",
|
"types": "dist/esm/index.d.ts",
|
||||||
"module": "dist/esm/index.js",
|
"module": "dist/esm/index.js",
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/prometheus/prometheus/blob/main/web/ui/module/codemirror-promql/README.md",
|
"homepage": "https://github.com/prometheus/prometheus/blob/main/web/ui/module/codemirror-promql/README.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@prometheus-io/lezer-promql": "0.54.0-rc.1",
|
"@prometheus-io/lezer-promql": "0.54.1",
|
||||||
"lru-cache": "^7.18.3"
|
"lru-cache": "^7.18.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@prometheus-io/lezer-promql",
|
"name": "@prometheus-io/lezer-promql",
|
||||||
"version": "0.54.0-rc.1",
|
"version": "0.54.1",
|
||||||
"description": "lezer-based PromQL grammar",
|
"description": "lezer-based PromQL grammar",
|
||||||
"main": "dist/index.cjs",
|
"main": "dist/index.cjs",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|
14
web/ui/package-lock.json
generated
14
web/ui/package-lock.json
generated
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "prometheus-io",
|
"name": "prometheus-io",
|
||||||
"version": "0.54.0-rc.1",
|
"version": "0.54.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "prometheus-io",
|
"name": "prometheus-io",
|
||||||
"version": "0.54.0-rc.1",
|
"version": "0.54.1",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"react-app",
|
"react-app",
|
||||||
"module/*"
|
"module/*"
|
||||||
|
@ -30,10 +30,10 @@
|
||||||
},
|
},
|
||||||
"module/codemirror-promql": {
|
"module/codemirror-promql": {
|
||||||
"name": "@prometheus-io/codemirror-promql",
|
"name": "@prometheus-io/codemirror-promql",
|
||||||
"version": "0.54.0-rc.1",
|
"version": "0.54.1",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@prometheus-io/lezer-promql": "0.54.0-rc.1",
|
"@prometheus-io/lezer-promql": "0.54.1",
|
||||||
"lru-cache": "^7.18.3"
|
"lru-cache": "^7.18.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
},
|
},
|
||||||
"module/lezer-promql": {
|
"module/lezer-promql": {
|
||||||
"name": "@prometheus-io/lezer-promql",
|
"name": "@prometheus-io/lezer-promql",
|
||||||
"version": "0.54.0-rc.1",
|
"version": "0.54.1",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@lezer/generator": "^1.7.1",
|
"@lezer/generator": "^1.7.1",
|
||||||
|
@ -19352,7 +19352,7 @@
|
||||||
},
|
},
|
||||||
"react-app": {
|
"react-app": {
|
||||||
"name": "@prometheus-io/app",
|
"name": "@prometheus-io/app",
|
||||||
"version": "0.54.0-rc.1",
|
"version": "0.54.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/autocomplete": "^6.17.0",
|
"@codemirror/autocomplete": "^6.17.0",
|
||||||
"@codemirror/commands": "^6.6.0",
|
"@codemirror/commands": "^6.6.0",
|
||||||
|
@ -19370,7 +19370,7 @@
|
||||||
"@lezer/lr": "^1.4.2",
|
"@lezer/lr": "^1.4.2",
|
||||||
"@nexucis/fuzzy": "^0.4.1",
|
"@nexucis/fuzzy": "^0.4.1",
|
||||||
"@nexucis/kvsearch": "^0.8.1",
|
"@nexucis/kvsearch": "^0.8.1",
|
||||||
"@prometheus-io/codemirror-promql": "0.54.0-rc.1",
|
"@prometheus-io/codemirror-promql": "0.54.1",
|
||||||
"bootstrap": "^4.6.2",
|
"bootstrap": "^4.6.2",
|
||||||
"css.escape": "^1.5.1",
|
"css.escape": "^1.5.1",
|
||||||
"downshift": "^9.0.6",
|
"downshift": "^9.0.6",
|
||||||
|
|
|
@ -28,5 +28,5 @@
|
||||||
"ts-jest": "^29.2.2",
|
"ts-jest": "^29.2.2",
|
||||||
"typescript": "^4.9.5"
|
"typescript": "^4.9.5"
|
||||||
},
|
},
|
||||||
"version": "0.54.0-rc.1"
|
"version": "0.54.1"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@prometheus-io/app",
|
"name": "@prometheus-io/app",
|
||||||
"version": "0.54.0-rc.1",
|
"version": "0.54.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/autocomplete": "^6.17.0",
|
"@codemirror/autocomplete": "^6.17.0",
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
"@lezer/lr": "^1.4.2",
|
"@lezer/lr": "^1.4.2",
|
||||||
"@nexucis/fuzzy": "^0.4.1",
|
"@nexucis/fuzzy": "^0.4.1",
|
||||||
"@nexucis/kvsearch": "^0.8.1",
|
"@nexucis/kvsearch": "^0.8.1",
|
||||||
"@prometheus-io/codemirror-promql": "0.54.0-rc.1",
|
"@prometheus-io/codemirror-promql": "0.54.1",
|
||||||
"bootstrap": "^4.6.2",
|
"bootstrap": "^4.6.2",
|
||||||
"css.escape": "^1.5.1",
|
"css.escape": "^1.5.1",
|
||||||
"downshift": "^9.0.6",
|
"downshift": "^9.0.6",
|
||||||
|
|
Loading…
Reference in a new issue