mirror of https://github.com/prometheus/prometheus
main
release-3.0
cedwards/nhcb-wal-wbl
keep-multiple-separators
labels-utf8-fix
alexg/settable-user-agent
beorn7/metrics
dependabot/npm_and_yarn/web/ui/tanstack/react-query-5.60.6
dependabot/npm_and_yarn/web/ui/codemirror/language-6.10.3
dependabot/npm_and_yarn/web/ui/reduxjs/toolkit-2.3.0
release-2.53
release-2.55
otel-3
bwplotka/2_18_cmp
fionaliao/3.0-migration-guide-fixes
bwplotka/2_0_cmp
alexg/fix-fallback-scrape
cedwards/ooo-native-histograms-promql-tests
dependabot/npm_and_yarn/web/ui/react-router-dom-6.27.0
dependabot/npm_and_yarn/web/ui/uiw/react-codemirror-4.23.6
dependabot/npm_and_yarn/web/ui/typescript-eslint/eslint-plugin-8.12.2
dependabot/npm_and_yarn/web/ui/lezer/common-1.2.3
dependabot/npm_and_yarn/web/ui/uplot-1.6.31
dependabot/npm_and_yarn/web/ui/testing-library/jest-dom-6.6.3
dependabot/npm_and_yarn/web/ui/types/jest-29.5.14
dependabot/npm_and_yarn/web/ui/eslint/compat-1.2.2
dependabot/npm_and_yarn/web/ui/eslint/js-9.14.0
dependabot/npm_and_yarn/web/ui/vitejs/plugin-react-4.3.3
dependabot/npm_and_yarn/web/ui/rollup/plugin-node-resolve-15.3.0
dependabot/npm_and_yarn/web/ui/mantine/code-highlight-7.13.4
dependabot/npm_and_yarn/web/ui/sanitize-html-2.13.1
dependabot/npm_and_yarn/web/ui/globals-15.11.0
dependabot/npm_and_yarn/web/ui/types/react-18.3.12
dependabot/npm_and_yarn/web/ui/types/lodash-4.17.13
dependabot/npm_and_yarn/web/ui/eslint-plugin-react-hooks-5.1.0-rc.0
ooo-nh-fix
jvp/refactor-append-to-have-hints
bwplotka/nhcb-wal-wbl
jvp/refactor-append-to-have-hints-as-value
jvp/refactor-append-to-have-hints-and-single-appendcall
redesign-parser-interface
imprct
textparsebench-manik1
manik2
rel-2.55-backport-14947
bisect-series-base
callum-rw-split-intern
catch-sighup-early
njpm/fix-mockIndex
trim-3.0changelog-for-2.55
njpm/tsdb-utf8-mixed-querying
callum-vt20
julius/y-axis-zero
superq/help_link
jvp/enable-otlp-endpoint-by-default
krajo/testing-pr14831
revert-14809-patch-mem-issue
cut-2.54.2
release-2.54
arthursens/appendct-prwv2
arthursens/ct-in-wal
callum-rw-intern-v3
callum-rw-intern-unique
pull/14654/head
release-2.54+dedupelabels
superq/update_storage_docs
manik1
revert-14513-fix-histogram-overlap-compaction-bug
v2.54.0+dedupelabels
jvp/metadata-poc
mantine-ui-uplot
superq/betteralign_promql
callum-live-segment-test
remote-write-2.0
rw20-nhcb
nhcb
njpm/rw2-main-sync-conflicts
rw20-helpers-gen
rw20-gen
release-2.45
callum-filter-benchmark
jvp/range-duration-with-open-intervals
callum-simplify-ts-filtering
update-2.53-to-correct-place
beorn7/lookback
release-2.52
faster-exemplars
alexg-remove-HEAD-1
rw20-config
alexg-content-negotiation-dont-advertise
release-2.51
revert-13498-alexg-content-negotiation-2
alexg-content-negotiation-2
release-2.51+dedupelabels
krajo/engine-immutable-histograms
release-2.50
feature/new-prom-ui
owilliams/utf8-03-reads
njpm/rw2-sync-main-conflicts
superq/v2
alexg-content-negotiation
release-v2.50
owilliams/utf8-02-mimir
owilliams/utf8
release-2.49
csmarchbanks/native-histogram-compact-format
csmarchbanks/native-histogram-json-format
csmarchbanks/native-histogram-verbose-format
njpm/metadata-remote-write-wiring-2-update
prw-shard-test
arct2
release-2.48
vtproto-test
bwplotka/prw-initial
test-rw-compression
callum-rw-min-format
callum-rw-e2e-dashboard-1
release-2.47
callum-opportunistic-labels-cleanup
feature/shutdownscrape
bwplotka/config-watch
release-2.37
release-2.46
remote-write-checkpoint
native-histogram-charts
prom-common-update-0.43
release-2.44
release-2.43+stringlabels
release-2.43
callum-track-series-segment
callum-remote-proto-2
callum-watcher-poll-backoff
release-2.42
histogram-charts
csmarchbanks/optmize-arrow-responses
csmarchbanks/arrow-responses
csmarchbanks/arrow-native-histograms
release-2.41
release-2.40
release-2.39
add-body-size-limit-global
pre-ooo
release-2.38
remove-circleci-windows-tests
nexucis/sd-optimisation
revert-10878-jvp/replay-wait-for-idle-dont-always-sleep
histogram-json-experiment
release-2.36
nexucis/sofisticat-query
wip-play-prombench
release-2.35
release-2.34
release-2.33
rmremote_storage
release-2.32
release-2.31
release-2.30
beorn7/polymorphism
superq/fieldalignment
mem/fix_8551
release-2.30-merge
release-2.29
richih/remove_indirect_deps
expand
release-2.28
proposalprocess
release-docs-formatting-fix
merge-main
release-2.26
release-2.27
bp/append-docs
release-2.25
revert-8489-append
superq/drop_vendor
post-processing
exemplar-storage-separate-mvp
release-2.24
multi-err-cause
partial-response
lazy-unsymbolize
release-2.23
release-2.22
for-cortex-1-4-1
lbl-optimize
write-req-content-size
release-2.21
fix-2.21-latency
promselect
fix-2.21-iter-latency
segfault-chunk-iter
release-2.20
scrape-bytes-scraped
release-2.19
tsdb-import
tsdb-import-csv
fix-sym-7373-3
fix-sym-7373-2
fix-sym-7373
release-2.18
release-2.17
superq/test
series-hint
add-chunkiterator-interface
rule-page-followups
shutdown-select-bug
revert-6907-prom/rules_race_condition
release-2.16
revert-6605-master
join
nav-settings
release-2.15
f17-test
react-travis-test-branch
release-2.14
release-2.13
release-2.12
release-2.11
rr
remove-alertmanager
rr-proto
integrate-react
release-2.10
allow-swappable-engine
release-2.9
fix/binop-output-labels
release-2.8
release-2.7
resharding
release-2.6
release-2.5
release-2.4
release-2.3
release-2.2
richih/examples
release-2.1
release-2.0
release-1.8.2
release-1.8
release-1.7
release-1.6
release-1.5
release-1.4
release-1.3
release-1.2
release-1.1
release-0.20
release-0.18
release-0.16
v0.300.0
v3.0.0
v0.300.0-rc.1
v3.0.0-rc.1
v0.55.1
v2.55.1
v0.53.3
v2.53.3
v0.300.0-beta.1
v3.0.0-rc.0
v0.300.0-rc.0
v0.55.0
v2.55.0
v2.55.0-rc.1
v2.55.0-rc.0
v0.300.0-beta.0
v3.0.0-beta.0
v0.54.1
v2.54.1
v0.53.2
v2.53.2
v2.54.0+dedupelabels
v0.54.0
v2.54.0
v2.54.0-rc.1
v2.54.0-rc.0+dedupelabels
v0.54.0-rc.0
v2.54.0-rc.0
v0.53.1
v2.53.1
v0.45.6
v2.45.6
v0.53.0
v2.53.0
v0.53.0-rc.1
v2.53.0-rc.1
v0.53.0-rc.0
v2.53.0-rc.0
v0.52.1
v0.52.0
v2.52.0
v0.52.0-rc.1
v2.52.0-rc.1
v0.45.5
v2.45.5
v0.52.0-rc.0
v2.52.0-rc.0
v0.51.2
v2.51.2
v0.51.1
v2.51.1
v2.51.0+dedupelabels
v0.51.0
v2.51.0
v0.45.4
v2.45.4
v2.51.0-rc.0+dedupelabels
v2.51.0-rc.0
v0.50.1
v2.50.1
v0.50.0
v2.50.0
v0.50.0-rc.1
v2.50.0-rc.1
v0.50.0-rc.0
v2.50.0-rc.0
v0.45.3
v2.45.3
v0.49.1
v0.49.0
v2.49.1
v2.49.0
v0.49.0-rc.2
v2.49.0-rc.2
v0.49.0-rc.1
v2.49.0-rc.1
v0.45.2
v2.45.2
v0.49.0-rc.0
v2.49.0-rc.0
v0.48.1
v2.48.1
v0.48.0
v2.48.0
v0.48.0-rc.2
v2.48.0-rc.2
v0.48.0-rc.1
v2.48.0-rc.1
v0.48.0-rc.0
v2.48.0-rc.0
v0.47.2
v2.47.2
v0.47.1
v2.47.1
v0.45.1
v2.45.1
v0.47.0
v2.47.0
v0.47.0-rc.0
v2.47.0-rc.0
v0.37.9
v2.37.9
v0.46.0
v2.46.0
v0.46.0-rc.0
v2.46.0-rc.0
v0.45.0
v2.45.0
v0.45.0-rc.1
v2.45.0-rc.1
v0.45.0-rc.0
v2.45.0-rc.0
v0.44.0
v2.44.0
v0.44.0-rc.1
v0.44.0-rc.2
v2.44.0-rc.2
v0.37.8
v2.37.8
v0.43.1
v2.43.1
v2.43.1+stringlabels
v2.44.0-rc.1
v0.37.7
v2.37.7
v0.44.0-rc.0
v2.44.0-rc.0
v0.43.0
v2.43.0
v2.43.0+stringlabels
v2.43.0-rc.1+stringlabels
v0.43.0-rc.1
v2.43.0-rc.1
v0.43.0-rc.0
v2.43.0-rc.0
v0.37.6
v2.37.6
v0.42.0
v2.42.0
v2.42.0-rc.0
v0.41.0
v2.41.0
v0.41.0-rc.0
v2.41.0-rc.0
v0.40.7
v2.40.7
v0.40.6
v2.40.6
v0.37.5
v2.37.5
v0.40.5
v2.40.5
v2.40.4
v0.40.4
v2.37.4
v0.37.4
v0.40.3
v2.40.3
v0.37.3
v2.37.3
v0.40.2
v2.40.2
v0.40.1
v2.40.1
v0.39.2
v2.39.2
v0.40.0
v2.40.0
v0.37.2
v2.37.2
v0.40.0-rc.0
v2.40.0-rc.0
v0.39.1
v2.39.1
v0.39.0
v2.39.0
v2.39.0-rc.0
v0.37.1
v2.37.1
v0.38.0
v2.38.0
v0.38.0-rc.0
v2.38.0-rc.0
v0.37.0
v2.37.0
v0.37.0-rc.1
v2.37.0-rc.1
v0.37.0-rc.0
v2.37.0-rc.0
v0.36.2
v2.36.2
v0.36.1
v2.36.1
v0.36.0
v2.36.0
v0.36.0-rc0
v2.36.0-rc0
v0.35.0
v2.35.0
v1.99.0
v1.99.0-retract
v2.35.0-retract
v0.35.0-rc1
v2.35.0-rc1
v2.35.0-rc0
v2.34.0
v2.34.0-rc.2
v2.34.0-rc.1
v2.33.5
v2.34.0-rc.0
v2.33.4
v2.33.3
v2.33.2
v2.33.1
v2.33.0
v2.33.0-rc.1
v2.33.0-rc.0
v2.32.1
v2.32.0
v2.31.2
v2.30.4
v2.32.0-rc.1
v2.32.0-rc.0
v2.32.0-beta.0
v2.31.1
v2.31.0
v2.31.0-rc.1
v2.31.0-rc.0
v2.30.3
v2.30.2
v2.30.1
v2.30.0
v2.30.0-rc.0
v2.29.2
v2.29.1
v2.29.0
v2.29.0-rc.2
v2.29.0-rc.1
v2.29.0-rc.0
v2.28.1
v2.28.0
v2.28.0-rc.0
v2.27.1
v2.26.1
v2.27.0
v2.27.0-rc.0
v2.26.0
v2.26.0-rc.0
v2.25.2
v2.25.1
v2.25.0
v2.25.0-rc.0
v2.24.1
v2.24.0
v2.24.0-rc.0
v2.23.0
v2.23.0-rc.0
v2.22.2
v2.22.1
v2.22.0
v2.22.0-rc.0
v2.21.0
v2.21.0-rc.1
v2.21.0-rc.0
v2.20.1
v2.19.3
v2.20.0
v2.20.0-rc.1
v2.20.0-rc.0
v2.19.2
v2.19.1
v2.19.0
v2.18.2
v2.19.0-rc.0
v2.18.1
v2.18.0
v2.18.0-rc.1
v2.18.0-rc.0
v2.17.2
v2.17.1
v2.17.0
v2.17.0-rc.4
v2.17.0-rc.3
v2.17.0-rc.2
v2.17.0-rc.1
v2.17.0-rc.0
v2.16.0
v2.16.0-rc.1
v2.16.0-rc.0
v2.15.2
v2.15.1
v2.15.0
v2.15.0-rc.0
v2.14.0
v2.14.0-rc.0
v2.13.1
v2.13.0
v2.12.0
v2.12.0-rc.0
v2.11.2
v2.11.1
v2.11.0
v2.11.0-rc.0
v2.10.0
v2.10.0-rc.0
v2.9.2
v2.9.1
v2.9.0
v2.9.0-rc.0
v2.8.1
v2.8.0
v2.8.0-rc.0
v2.7.2
v2.7.1
v2.7.0
v2.7.0-rc.2
v2.7.0-rc.1
v2.7.0-rc.0
v2.6.1
v2.6.0
v2.6.0-rc.1
v2.6.0-rc.0
v2.5.0
v2.5.0-rc.2
v2.5.0-rc.1
v2.5.0-rc.0
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.4.0-rc.0
v2.3.2
v2.3.1
v2.2.0-rc.0
v2.1.0
v2.0.0
v2.0.0-rc.3
v1.8.2
v1.8.1
v1.8.0
v2.0.0-rc.0
v1.7.2
v1.7.1
v1.7.0
v1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.3.1
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.0.1
0.1.0
0.10.0
0.11.0
0.11.1
0.12.0
0.13.0
0.13.0rc2
0.13.1
0.13.2
0.13.3
0.13.4
0.14.0
0.14.0rc1
0.14.0rc2
0.14.0rc3
0.15.0
0.15.0rc1
0.15.0rc2
0.15.0rc3
0.15.1
0.16.0
0.16.0rc1
0.16.0rc2
0.16.1
0.16.2
0.17.0
0.17.0rc1
0.17.0rc2
0.18.0
0.18.0rc1
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.20.0
0.3.0
0.4.0
0.5.0
0.6.0
0.7.0
0.8.0
0.9.0
0.9.0rc1
0.9.0rc2
0.9.0rc3
0.9.0rc4
0.9.0rc5
all-tests-pass
checkout
dev
discovery-handle-discoverer-updates
v1.0.0
v1.0.0-rc.0
v1.0.2
v1.1.0
v1.1.1
v1.1.2
v1.1.3
v1.3.0
v1.3.0-beta.0
v1.4.0
v1.4.1
v1.5.3
v1.6.2
v1.6.3
v2.0.0-alpha.0
v2.0.0-alpha.1
v2.0.0-alpha.2
v2.0.0-alpha.3
v2.0.0-beta.0
v2.0.0-beta.1
v2.0.0-beta.2
v2.0.0-beta.3
v2.0.0-beta.4
v2.0.0-beta.5
v2.0.0-rc.1
v2.0.0-rc.2
v2.13.0-rc.0
v2.2.0
v2.2.0-rc.1
v2.2.1
v2.3.0
v3.0.0-beta.1
${ noResults }
20 Commits (8dfd829fefc4e3124f717e6d969549945ee18320)
Author | SHA1 | Message | Date |
---|---|---|---|
Simon Pasquier |
4f47806a7d
|
discovery/dns: fix slice with wrong length (#5432)
Signed-off-by: Simon Pasquier <spasquie@redhat.com> |
6 years ago |
Tariq Ibrahim | 8fdfa8abea |
refine error handling in prometheus (#5388)
i) Uses the more idiomatic Wrap and Wrapf methods for creating nested errors. ii) Fixes some incorrect usages of fmt.Errorf where the error messages don't have any formatting directives. iii) Does away with the use of fmt package for errors in favour of pkg/errors Signed-off-by: tariqibrahim <tariq181290@gmail.com> |
6 years ago |
Simon Pasquier |
782d00059a
|
discovery: factorize for SD based on refresh (#5381)
* discovery: factorize for SD based on refresh Signed-off-by: Simon Pasquier <spasquie@redhat.com> * discovery: use common metrics for refresh Signed-off-by: Simon Pasquier <spasquie@redhat.com> |
6 years ago |
Erik Hollensbe | be3c082539 |
discovery/dns/dns.go: fix handling of truncated dns records
https://github.com/miekg/dns/pull/815 goes into the detail, but more or less the existing solution was no longer supported and needed to be rewritten to support the new versions of the library. miekg additionally claims this is more correct in the ticket. Signed-off-by: Erik Hollensbe <github@hollensbe.org> |
6 years ago |
tariqibrahim | b173de0c26 |
fix ineffectual assignment in dns.go
Signed-off-by: tariqibrahim <tariq181290@gmail.com> |
6 years ago |
Ben Kochie |
c6399296dc
|
Fix spelling/typos (#4921)
* Fix spelling/typos Fix spelling/typos reported by codespell/misspell. * UK -> US spelling changes. Signed-off-by: Ben Kochie <superq@gmail.com> |
6 years ago |
Goutham Veeramachaneni | f988af7235 |
Revert #4586 (#4766)
This breaks people if they are depending on the contents of __address__ label. Signed-off-by: Goutham Veeramachaneni <gouthamve@gmail.com> |
6 years ago |
Bryan Boreham | 968f657eaa |
Stop removing the final dot from rooted DNS names (#4586)
Removing a final dot changes the meaning of the name and can cause extra DNS lookups as the resolver traverses its search path. Signed-off-by: Bryan Boreham <bjboreham@gmail.com> |
6 years ago |
Manos Fokas | 25f929b772 |
Yaml UnmarshalStrict implementation. (#4033)
* Updated yaml vendor package. * remove checkOverflow duplicate in rulefmt * remove duplicated HTTPClientConfig.Validate() * Added yaml static check. |
7 years ago |
Matt Palmer | 042090a6d3 |
[dns_sd] Send an EDNS0 query by default (#3586)
Based on https://groups.google.com/d/topic/prometheus-users/02kezHbuea4/discussion Does not attempt to handle a situation where the server does not understand EDNS0, however that is an unlikely case, and the behaviour of such ancient systems is hard to predict in advance, so if it does come up, it will need to be handled on a case-by-case basis. |
7 years ago |
Callum Styan | 97464236c7 |
comments with TargetProvider should read Discoverer instead (#3667)
|
7 years ago |
Shubheksha Jalan | ec94df49d4 |
Refactor SD configuration to remove `config` dependency (#3629)
* refactor: move targetGroup struct and CheckOverflow() to their own package * refactor: move auth and security related structs to a utility package, fix import error in utility package * refactor: Azure SD, remove SD struct from config * refactor: DNS SD, remove SD struct from config into dns package * refactor: ec2 SD, move SD struct from config into the ec2 package * refactor: file SD, move SD struct from config to file discovery package * refactor: gce, move SD struct from config to gce discovery package * refactor: move HTTPClientConfig and URL into util/config, fix import error in httputil * refactor: consul, move SD struct from config into consul discovery package * refactor: marathon, move SD struct from config into marathon discovery package * refactor: triton, move SD struct from config to triton discovery package, fix test * refactor: zookeeper, move SD structs from config to zookeeper discovery package * refactor: openstack, remove SD struct from config, move into openstack discovery package * refactor: kubernetes, move SD struct from config into kubernetes discovery package * refactor: notifier, use targetgroup package instead of config * refactor: tests for file, marathon, triton SD - use targetgroup package instead of config.TargetGroup * refactor: retrieval, use targetgroup package instead of config.TargetGroup * refactor: storage, use config util package * refactor: discovery manager, use targetgroup package instead of config.TargetGroup * refactor: use HTTPClient and TLS config from configUtil instead of config * refactor: tests, use targetgroup package instead of config.TargetGroup * refactor: fix tagetgroup.Group pointers that were removed by mistake * refactor: openstack, kubernetes: drop prefixes * refactor: remove import aliases forced due to vscode bug * refactor: move main SD struct out of config into discovery/config * refactor: rename configUtil to config_util * refactor: rename yamlUtil to yaml_config * refactor: kubernetes, remove prefixes * refactor: move the TargetGroup package to discovery/ * refactor: fix order of imports |
7 years ago |
Julius Volz | 099df0c5f0 |
Migrate "golang.org/x/net/context" -> "context" (#3333)
In some places, where ctxhttp or gRPC are concerned, we still need to use the old contexts. |
7 years ago |
Fabian Reinartz | 2d0b8e8b94 |
Merge branch 'master' into dev-2.0
|
7 years ago |
Matt Palmer | 3369422327 |
Improve DNS response handling to prevent "stuck" records [Fixes #2799] (#3138)
The problem reported in #2799 was that in the event that all records for a name were removed, the target group was never updated to be the "empty" set. Essentially, whatever Prometheus last saw as a non-empty list of targets would stay that way forever (or at least until Prometheus restarted...). This came about because of a fairly naive interpretation of what a valid-looking DNS response actually looked like -- essentially, the only valid DNS responses were ones that had a non-empty record list. That's fine as long as your config always lists only target names which have non-empty record sets; if your environment happens to legitimately have empty record sets sometimes, all hell breaks loose (otherwise-cleanly shutdown systems trigger up==0 alerts, for instance). This patch is a refactoring of the DNS lookup behaviour that maintains existing behaviour with regard to search paths, but correctly handles empty and non-existent record sets. RFC1034 s4.3.1 says there's three ways a recursive DNS server can respond: 1. Here is your answer (possibly an empty answer, because of the way DNS considers all records for a name, regardless of type, when deciding whether the name exists). 2. There is no spoon (the name you asked for definitely does not exist). 3. I am a teapot (something has gone terribly wrong). Situations 1 and 2 are fine and dandy; whatever the answer is (empty or otherwise) is the list of targets. If something has gone wrong, then we shouldn't go updating the target list because we don't really *know* what the target list should be. Multiple DNS servers to query is a straightforward augmentation; if you get an error, then try the next server in the list, until you get an answer or run out servers to ask. Only if *all* the servers return errors should you return an error to the calling code. Where things get complicated is the search path. In order to be able to confidently say, "this name does not exist anywhere, you can remove all the targets for this name because it's definitely GORN", at least one server for *all* the possible names need to return either successful-but-empty responses, or NXDOMAIN. If any name errors out, then -- since that one might have been the one where the records came from -- you need to say "maintain the status quo until we get a known-good response". It is possible, though unlikely, that a poorly-configured DNS setup (say, one which had a domain in its search path for which all configured recursive resolvers respond with REFUSED) could result in the same "stuck" records problem we're solving here, but the DNS configuration should be fixed in that case, and there's nothing we can do in Prometheus itself to fix the problem. I've tested this patch on a local scratch instance in all the various ways I can think of: 1. Adding records (targets get scraped) 2. Adding records of a different type 3. Remove records of the requested type, leaving other type records intact (targets don't get scraped) 4. Remove all records for the name (targets don't get scraped) 5. Shutdown the resolver (targets still get scraped) There's no automated test suite additions, because there isn't a test suite for DNS discovery, and I was stretching my Go skills to the limit to make this happen; mock objects are beyond me. |
7 years ago |
Fabian Reinartz | d21f149745 |
*: migrate to go-kit/log
|
7 years ago |
Chris Goller | 42de0ae013 |
Use log.Logger interface for all discovery services
|
8 years ago |
Tobias Schmidt | 58cd39aacd |
Follow golang naming conventions in discovery packages
|
8 years ago |
James Hartig | 865f28bb15 |
discovery: Instead of looping over conf.Search, use NameList()
|
8 years ago |
Fabian Reinartz | d19d1bcad3 |
discovery: move into top-level package
|
8 years ago |