mirror of
https://github.com/prometheus/prometheus
synced 2024-12-27 17:13:22 +00:00
Merge pull request #14741 from prometheus/merge-2.54.1-into-main
Merge 2.54.1 into main
This commit is contained in:
commit
9a813d5d0f
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
|
||||
* [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/).
|
||||
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] Rules: Add label-matcher support to Rules API. #10194
|
||||
* [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] PromQL (experimental native histograms): Fix some binary operators between native histogram values. #14454
|
||||
* [BUGFIX] TSDB: LabelNames API could fail during compaction. #14279
|
||||
|
@ -19,6 +19,7 @@ import (
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"sort"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
@ -251,28 +252,26 @@ func (d *DockerDiscovery) refresh(ctx context.Context) ([]*targetgroup.Group, er
|
||||
}
|
||||
|
||||
if d.matchFirstNetwork && len(networks) > 1 {
|
||||
// Match user defined network
|
||||
if containerNetworkMode.IsUserDefined() {
|
||||
networkMode := string(containerNetworkMode)
|
||||
networks = map[string]*network.EndpointSettings{networkMode: networks[networkMode]}
|
||||
} else {
|
||||
// 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
|
||||
}
|
||||
// Sort networks by name and take first non-nil network.
|
||||
keys := make([]string, 0, len(networks))
|
||||
for k, n := range networks {
|
||||
if n != nil {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
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 {
|
||||
if n == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
var added bool
|
||||
|
||||
for _, p := range c.Ports {
|
||||
|
@ -60,9 +60,9 @@ host: %s
|
||||
tg := tgs[0]
|
||||
require.NotNil(t, tg)
|
||||
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",
|
||||
"__meta_docker_container_id": "c301b928faceb1a18fe379f6bc178727ef920bb30b0f9b8592b32b36255a0eca",
|
||||
@ -163,7 +163,43 @@ host: %s
|
||||
"__meta_docker_network_scope": "local",
|
||||
"__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) {
|
||||
require.Equal(t, lbls, tg.Targets[i])
|
||||
})
|
||||
@ -202,13 +238,8 @@ host: %s
|
||||
tg := tgs[0]
|
||||
require.NotNil(t, tg)
|
||||
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{
|
||||
{
|
||||
"__address__": "172.19.0.2:9100",
|
||||
@ -359,6 +390,70 @@ host: %s
|
||||
"__meta_docker_network_scope": "local",
|
||||
"__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)
|
||||
@ -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": {}
|
||||
},
|
||||
"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.
|
||||
[ 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 ]
|
||||
|
||||
# Optional filters to limit the discovery process to a subset of available
|
||||
|
@ -1646,7 +1646,7 @@ loop:
|
||||
updateMetadata(lset, true)
|
||||
}
|
||||
|
||||
if seriesAlreadyScraped {
|
||||
if seriesAlreadyScraped && parsedTimestamp == nil {
|
||||
err = storage.ErrDuplicateSampleForTimestamp
|
||||
} else {
|
||||
if ctMs := p.CreatedTimestamp(); sl.enableCTZeroIngestion && ctMs != nil {
|
||||
|
@ -35,6 +35,7 @@ import (
|
||||
"github.com/gogo/protobuf/proto"
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
prom_testutil "github.com/prometheus/client_golang/prometheus/testutil"
|
||||
dto "github.com/prometheus/client_model/go"
|
||||
config_util "github.com/prometheus/common/config"
|
||||
"github.com/prometheus/common/model"
|
||||
@ -3644,6 +3645,7 @@ func TestScrapeLoopSeriesAddedDuplicates(t *testing.T) {
|
||||
require.Equal(t, 3, total)
|
||||
require.Equal(t, 3, added)
|
||||
require.Equal(t, 1, seriesAdded)
|
||||
require.Equal(t, 2.0, prom_testutil.ToFloat64(sl.metrics.targetScrapeSampleDuplicate))
|
||||
|
||||
slApp = sl.appender(ctx)
|
||||
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, added)
|
||||
require.Equal(t, 0, seriesAdded)
|
||||
require.Equal(t, 4.0, prom_testutil.ToFloat64(sl.metrics.targetScrapeSampleDuplicate))
|
||||
|
||||
metric := dto.Metric{}
|
||||
err = sl.metrics.targetScrapeSampleDuplicate.Write(&metric)
|
||||
// When different timestamps are supplied, multiple samples are accepted.
|
||||
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)
|
||||
value := metric.GetCounter().GetValue()
|
||||
require.Equal(t, 4.0, value)
|
||||
require.NoError(t, slApp.Commit())
|
||||
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
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@prometheus-io/codemirror-promql",
|
||||
"version": "0.54.0-rc.1",
|
||||
"version": "0.54.1",
|
||||
"description": "a CodeMirror mode for the PromQL language",
|
||||
"types": "dist/esm/index.d.ts",
|
||||
"module": "dist/esm/index.js",
|
||||
@ -29,7 +29,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/prometheus/prometheus/blob/main/web/ui/module/codemirror-promql/README.md",
|
||||
"dependencies": {
|
||||
"@prometheus-io/lezer-promql": "0.54.0-rc.1",
|
||||
"@prometheus-io/lezer-promql": "0.54.1",
|
||||
"lru-cache": "^7.18.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@prometheus-io/lezer-promql",
|
||||
"version": "0.54.0-rc.1",
|
||||
"version": "0.54.1",
|
||||
"description": "lezer-based PromQL grammar",
|
||||
"main": "dist/index.cjs",
|
||||
"type": "module",
|
||||
|
14
web/ui/package-lock.json
generated
14
web/ui/package-lock.json
generated
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "prometheus-io",
|
||||
"version": "0.54.0-rc.1",
|
||||
"version": "0.54.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "prometheus-io",
|
||||
"version": "0.54.0-rc.1",
|
||||
"version": "0.54.1",
|
||||
"workspaces": [
|
||||
"react-app",
|
||||
"module/*"
|
||||
@ -30,10 +30,10 @@
|
||||
},
|
||||
"module/codemirror-promql": {
|
||||
"name": "@prometheus-io/codemirror-promql",
|
||||
"version": "0.54.0-rc.1",
|
||||
"version": "0.54.1",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@prometheus-io/lezer-promql": "0.54.0-rc.1",
|
||||
"@prometheus-io/lezer-promql": "0.54.1",
|
||||
"lru-cache": "^7.18.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
@ -69,7 +69,7 @@
|
||||
},
|
||||
"module/lezer-promql": {
|
||||
"name": "@prometheus-io/lezer-promql",
|
||||
"version": "0.54.0-rc.1",
|
||||
"version": "0.54.1",
|
||||
"license": "Apache-2.0",
|
||||
"devDependencies": {
|
||||
"@lezer/generator": "^1.7.1",
|
||||
@ -19352,7 +19352,7 @@
|
||||
},
|
||||
"react-app": {
|
||||
"name": "@prometheus-io/app",
|
||||
"version": "0.54.0-rc.1",
|
||||
"version": "0.54.1",
|
||||
"dependencies": {
|
||||
"@codemirror/autocomplete": "^6.17.0",
|
||||
"@codemirror/commands": "^6.6.0",
|
||||
@ -19370,7 +19370,7 @@
|
||||
"@lezer/lr": "^1.4.2",
|
||||
"@nexucis/fuzzy": "^0.4.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",
|
||||
"css.escape": "^1.5.1",
|
||||
"downshift": "^9.0.6",
|
||||
|
@ -28,5 +28,5 @@
|
||||
"ts-jest": "^29.2.2",
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"version": "0.54.0-rc.1"
|
||||
"version": "0.54.1"
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@prometheus-io/app",
|
||||
"version": "0.54.0-rc.1",
|
||||
"version": "0.54.1",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@codemirror/autocomplete": "^6.17.0",
|
||||
@ -19,7 +19,7 @@
|
||||
"@lezer/lr": "^1.4.2",
|
||||
"@nexucis/fuzzy": "^0.4.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",
|
||||
"css.escape": "^1.5.1",
|
||||
"downshift": "^9.0.6",
|
||||
|
Loading…
Reference in New Issue
Block a user