# HG changeset patch
# User Christophe de Vienne <christophe@cdevienne.info>
# Date 1632759895 -7200
#      Mon Sep 27 18:24:55 2021 +0200
# Node ID 7908dfbcac1f1960c82db6b7c8af2c72d2acab66
# Parent  5091da796767856577b5f919d404b9d183d98c80
Fix prometheus generated code when using operation groups

diff --git a/server.yaml b/server.yaml
--- a/server.yaml
+++ b/server.yaml
@@ -22,14 +22,14 @@
       file_name: "doc.go"
 
     # custom templates
+    - name: logging
+      source: server/logging.gotmpl
+      target: "{{ if gt (len .Tags) 0 }}{{ joinFilePath .Target .ServerPackage .APIPackage .Package  }}{{ else }}{{ joinFilePath .Target .ServerPackage .Package  }}{{ end }}"
+      file_name: "logging.go"
     - name: init_prometheus
       source: server/initPrometheus.gotmpl
       target: "{{ joinFilePath .Target .ServerPackage .Package }}"
       file_name: "prometheus.go"
-    - name: logging
-      source: server/logging.gotmpl
-      target: "{{ if gt (len .Tags) 0 }}{{ joinFilePath .Target .ServerPackage .APIPackage .Package  }}{{ else }}{{ joinFilePath .Target .ServerPackage .Package  }}{{ end }}"
-      file_name: "logging.go"
 
     - name: main
       source: server/main.gotmpl
@@ -103,3 +103,7 @@
       file_name: "{{ (snakize (pascalize .Name)) }}_prometheus.go"
 
   operation_groups:
+    - name: operation_init_prometheus
+      source: server/operationInitPrometheus.gotmpl
+      target: "{{ joinFilePath .Target .ServerPackage .APIPackage (snakize (pascalize .Name)) }}"
+      file_name: "prometheus.go"
diff --git a/templates/server/initPrometheus.gotmpl b/templates/server/initPrometheus.gotmpl
--- a/templates/server/initPrometheus.gotmpl
+++ b/templates/server/initPrometheus.gotmpl
@@ -24,10 +24,7 @@
         "api_version": "{{ .Info.Version }}",
     }, prometheus.DefaultRegisterer)
 
-    {{range .Operations}}
-    reg.MustRegister(
-        {{if ne .Package $package}}{{.Package}}.{{end}}{{ camelize .Name }}HandlerDuration,
-        {{if ne .Package $package}}{{.Package}}.{{end}}{{ camelize .Name }}HandlerInFlight,
-    )
-    {{end}}
+    {{range .OperationGroups}}
+    {{ .Name }}.RegisterPrometheus(reg)
+    {{- end}}
 }
diff --git a/templates/server/operationInitPrometheus.gotmpl b/templates/server/operationInitPrometheus.gotmpl
new file mode 100644
--- /dev/null
+++ b/templates/server/operationInitPrometheus.gotmpl
@@ -0,0 +1,23 @@
+// Code generated by go-swagger with a alpe-api template; DO NOT EDIT.
+
+package {{.Name}}
+{{ $package := .Name }}
+
+import (
+	"github.com/prometheus/client_golang/prometheus"
+  {{ range $key, $value := .Imports }}{{ $key }} {{ printf "%q" $value }}
+  {{ end }}
+)
+
+func RegisterPrometheus(reg prometheus.Registerer) {
+    reg = prometheus.WrapRegistererWith(prometheus.Labels{
+        "api_operation_group": "{{ .Name }}",
+    }, reg)
+
+    {{ range .Operations}}
+    reg.MustRegister(
+        {{ camelize .Name }}HandlerDuration,
+        {{ camelize .Name }}HandlerInFlight,
+    )
+    {{- end}}
+}