@@ -14,8 +14,9 @@ type MetricsData = metrics.MetricsData
1414
1515// metricsCollector provides thread-safe collection and storage of command metrics
1616type metricsCollector struct {
17- mu sync.RWMutex
18- metricsData map [string ]* MetricsData
17+ mu sync.RWMutex
18+ metricsData map [string ]* MetricsData
19+ packageAliasContext string
1920}
2021
2122var contextFlags []string
@@ -32,6 +33,9 @@ func CollectMetrics(commandName string, flags []string) {
3233 ciSystem := detectCISystem ()
3334 isCI := ciSystem != ""
3435
36+ pkgAliasTool := globalMetricsCollector .packageAliasContext
37+ globalMetricsCollector .packageAliasContext = ""
38+
3539 metricsData := & MetricsData {
3640 Flags : flags ,
3741 Platform : runtime .GOOS ,
@@ -43,7 +47,9 @@ func CollectMetrics(commandName string, flags []string) {
4347 }
4448 return ""
4549 }(),
46- IsContainer : isRunningInContainer (),
50+ IsContainer : isRunningInContainer (),
51+ PackageAlias : pkgAliasTool != "" ,
52+ PackageManager : pkgAliasTool ,
4753 }
4854
4955 globalMetricsCollector .metricsData [commandName ] = metricsData
@@ -61,12 +67,14 @@ func GetCollectedMetrics(commandName string) *MetricsData {
6167 }
6268
6369 return & MetricsData {
64- Flags : append ([]string (nil ), metrics .Flags ... ),
65- Platform : metrics .Platform ,
66- Architecture : metrics .Architecture ,
67- IsCI : metrics .IsCI ,
68- CISystem : metrics .CISystem ,
69- IsContainer : metrics .IsContainer ,
70+ Flags : append ([]string (nil ), metrics .Flags ... ),
71+ Platform : metrics .Platform ,
72+ Architecture : metrics .Architecture ,
73+ IsCI : metrics .IsCI ,
74+ CISystem : metrics .CISystem ,
75+ IsContainer : metrics .IsContainer ,
76+ PackageAlias : metrics .PackageAlias ,
77+ PackageManager : metrics .PackageManager ,
7078 }
7179}
7280
@@ -164,3 +172,12 @@ func GetContextFlags() []string {
164172 contextFlags = nil
165173 return flags
166174}
175+
176+ // SetPackageAliasContext records that the current command was invoked via a
177+ // package alias for the given package manager tool (e.g. "npm", "pip").
178+ // CollectMetrics reads and clears this value automatically.
179+ func SetPackageAliasContext (tool string ) {
180+ globalMetricsCollector .mu .Lock ()
181+ defer globalMetricsCollector .mu .Unlock ()
182+ globalMetricsCollector .packageAliasContext = tool
183+ }
0 commit comments