-
Notifications
You must be signed in to change notification settings - Fork 3
Allow empty namespace, namespace chain for nested structs #34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
burik666
wants to merge
1
commit into
cabify:master
Choose a base branch
from
burik666:fix-empty-namespace
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -82,7 +82,13 @@ func (in initializer) Init(metrics interface{}, namespace string) error { | |
return fmt.Errorf("expected pointer to metrics struct, got %q", metricsPtr.Kind()) | ||
} | ||
|
||
return in.initMetrics(metricsPtr.Elem(), namespace) | ||
var namespaces []string | ||
|
||
if namespace != "" { | ||
namespaces = append(namespaces, namespace) | ||
} | ||
|
||
return in.initMetrics(metricsPtr.Elem(), namespaces...) | ||
} | ||
|
||
func (in initializer) initMetrics(group reflect.Value, namespaces ...string) error { | ||
|
@@ -100,8 +106,12 @@ func (in initializer) initMetrics(group reflect.Value, namespaces ...string) err | |
} | ||
} else if fieldType.Type.Kind() == reflect.Struct { | ||
namespace, ok := fieldType.Tag.Lookup("namespace") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. WDYT if we write whole struct branch like this:
|
||
if !ok { | ||
return fmt.Errorf("field %s does not have the namespace tag defined", fieldType.Name) | ||
if !ok || namespace == "" { | ||
if err := in.initMetrics(field, namespaces...); err != nil { | ||
return err | ||
} | ||
|
||
continue | ||
} | ||
if err := in.initMetrics(field, append(namespaces, namespace)...); err != nil { | ||
return err | ||
|
@@ -134,7 +144,7 @@ func (in initializer) initMetricFunc(field reflect.Value, structField reflect.St | |
// Validate the input of the metric function, it should have zero or one arguments | ||
// If it has one argument, it should be a struct correctly tagged with label names | ||
// If there are no input arguments, this metric will not have labels registered | ||
var labelIndexes = make(map[label][]int) | ||
labelIndexes := make(map[label][]int) | ||
if fieldType.NumIn() > 1 { | ||
return fmt.Errorf("field %s: expected 1 in arg, got %d", structField.Name, fieldType.NumIn()) | ||
} else if fieldType.NumIn() == 1 { | ||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These changes are not necessary to make
namespace
optional for nested structs, right?Also. This is kind of breaking change. Before the change call to Init with empty namespace was producing _blah_blah metric (note the starting underscore). Even though it was not intentional, I'd keep this behaviour
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Underscores are added only for nested structures.
For example:
This will produce
aaa
,ccc
, and_sub_bbb
metrics. This looks a bit strange.How about replacing the
namespace
argument withnamespaces ...string
in theInit
function?This would allow metrics to be created without a prefix at all while preserving this behavior.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi! Sorry, for the late reply.
Oh, so you would like to initialze a metric without any namespace. What is your use case? I feel that having common prefix for related metrics is useful when querying. What you suggest is fine by me
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To be honest, I don’t remember why I needed this. xD
The official client allows this. I would like to keep this option and not impose any restrictions when using this package.
If you agree, I'll add
...string
argument.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, this is fine by me