Refine proboctl catalog selection flags and listing
Require exactly one selection anchor (--id, --linked-banner, --linked-org, or --common-third-party) for common-tracker-pattern reenrich, dropping the catch-all --all; the tracker-type, keyword, and state flags now narrow the anchor's result except when explicit --id values are given. Add --linked-banner, --linked-org, and a tri-state --with-common-third-party to the list command, replacing the separate --linked/--unlinked booleans, and rename --third-party to --common-third-party across both commands. Support these by adding an ID restriction to CommonTrackerPatternFilter so linked-banner/linked-org selections can be intersected with the remaining filters in a single query. Memoize the pg client on the proboctl Factory to avoid a duplicate Prometheus collector registration panic when more than one command path builds a client. Surface timestamps in both listing tables and flag enriched-but-undescribed rows in the displayed enrichment state. Signed-off-by: Émile Ré <emile@probo.com>
This commit is contained in:
@@ -71,6 +71,7 @@ func (s *CommonTrackerPatternEnrichmentState) UnmarshalText(text []byte) error {
|
||||
}
|
||||
|
||||
type CommonTrackerPatternFilter struct {
|
||||
ids []gid.GID
|
||||
trackerType *TrackerType
|
||||
matchType *TrackerPatternMatchType
|
||||
commonThirdPartyID *gid.GID
|
||||
@@ -83,6 +84,13 @@ func NewCommonTrackerPatternFilter() *CommonTrackerPatternFilter {
|
||||
return &CommonTrackerPatternFilter{}
|
||||
}
|
||||
|
||||
// WithIDs restricts the result to the given pattern IDs. A non-nil but
|
||||
// empty slice matches nothing.
|
||||
func (f *CommonTrackerPatternFilter) WithIDs(ids []gid.GID) *CommonTrackerPatternFilter {
|
||||
f.ids = ids
|
||||
return f
|
||||
}
|
||||
|
||||
func (f *CommonTrackerPatternFilter) WithTrackerType(trackerType *TrackerType) *CommonTrackerPatternFilter {
|
||||
f.trackerType = trackerType
|
||||
return f
|
||||
@@ -120,6 +128,12 @@ func (f *CommonTrackerPatternFilter) SQLFragment() string {
|
||||
|
||||
return `
|
||||
(
|
||||
CASE
|
||||
WHEN @filter_ids::text[] IS NOT NULL THEN
|
||||
id = ANY(@filter_ids)
|
||||
ELSE TRUE
|
||||
END
|
||||
AND
|
||||
CASE
|
||||
WHEN @filter_tracker_type::text IS NOT NULL THEN
|
||||
tracker_type = @filter_tracker_type::tracker_type
|
||||
@@ -164,6 +178,7 @@ func (f *CommonTrackerPatternFilter) SQLFragment() string {
|
||||
|
||||
func (f *CommonTrackerPatternFilter) SQLArguments() pgx.StrictNamedArgs {
|
||||
args := pgx.StrictNamedArgs{
|
||||
"filter_ids": nil,
|
||||
"filter_tracker_type": nil,
|
||||
"filter_match_type": nil,
|
||||
"filter_common_third_party_id": nil,
|
||||
@@ -178,6 +193,10 @@ func (f *CommonTrackerPatternFilter) SQLArguments() pgx.StrictNamedArgs {
|
||||
return args
|
||||
}
|
||||
|
||||
if f.ids != nil {
|
||||
args["filter_ids"] = f.ids
|
||||
}
|
||||
|
||||
if f.trackerType != nil {
|
||||
args["filter_tracker_type"] = string(*f.trackerType)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user