6
6
"log"
7
7
"net/http"
8
8
"strconv"
9
+ "strings"
9
10
10
11
"k8s.io/helm/pkg/helm"
11
12
"k8s.io/helm/pkg/proto/hapi/release"
30
31
})
31
32
32
33
localTiller = "127.0.0.1:44134"
33
- tillerNamespace = flag .String ("tiller-namespace " , "kube-system" , "namespace of Tiller (default \" kube-system\" ) " )
34
+ tillerNamespace = flag .String ("tiller-namespaces " , "kube-system" , "namespaces of Tillers , separated list kube-system,dev " )
34
35
35
36
statusCodes = []release.Status_Code {
36
37
release .Status_UNKNOWN ,
@@ -53,7 +54,6 @@ func newHelmClient(tillerEndpoint string) (*helm.Client, error) {
53
54
54
55
client := helm .NewClient (helm .Host (tillerEndpoint ))
55
56
err := client .PingTiller ()
56
-
57
57
return client , err
58
58
}
59
59
@@ -82,26 +82,25 @@ func filterList(rels []*release.Release) []*release.Release {
82
82
return uniq
83
83
}
84
84
85
- func newHelmStatsHandler (client * helm.Client ) http.HandlerFunc {
85
+ func newHelmStatsHandler (clients [] * helm.Client ) http.HandlerFunc {
86
86
return func (w http.ResponseWriter , r * http.Request ) {
87
- items , err := client .ListReleases (helm .ReleaseListStatuses (statusCodes ))
88
- if err == nil {
89
- stats .Reset ()
90
- for _ , item := range filterList (items .GetReleases ()) {
91
- metadata := item .GetChart ().GetMetadata ()
92
-
93
- chart := metadata .GetName ()
94
- status := item .GetInfo ().GetStatus ().GetCode ()
95
- releaseName := item .GetName ()
96
- version := metadata .GetVersion ()
97
- appVersion := metadata .GetAppVersion ()
98
- updated := strconv .FormatInt ((item .GetInfo ().GetLastDeployed ().Seconds * 1000 ), 10 )
99
- namespace := item .GetNamespace ()
100
- if status == release .Status_FAILED {
101
- status = - 1
87
+ stats .Reset ()
88
+ for _ , client := range clients {
89
+ items , err := client .ListReleases (helm .ReleaseListStatuses (statusCodes ))
90
+ if err == nil {
91
+ for _ , item := range filterList (items .GetReleases ()) {
92
+ chart := item .GetChart ().GetMetadata ().GetName ()
93
+ status := item .GetInfo ().GetStatus ().GetCode ()
94
+ releaseName := item .GetName ()
95
+ version := item .GetChart ().GetMetadata ().GetVersion ()
96
+ appVersion := item .GetChart ().GetMetadata ().GetAppVersion ()
97
+ updated := strconv .FormatInt ((item .GetInfo ().GetLastDeployed ().Seconds * 1000 ), 10 )
98
+ namespace := item .GetNamespace ()
99
+ if status == release .Status_FAILED {
100
+ status = - 1
101
+ }
102
+ stats .WithLabelValues (chart , releaseName , version , appVersion , updated , namespace ).Set (float64 (status ))
102
103
}
103
-
104
- stats .WithLabelValues (chart , releaseName , version , appVersion , updated , namespace ).Set (float64 (status ))
105
104
}
106
105
}
107
106
prometheusHandler .ServeHTTP (w , r )
@@ -116,18 +115,24 @@ func main() {
116
115
flagenv .Parse ()
117
116
flag .Parse ()
118
117
119
- client , err := newHelmClient (fmt .Sprintf ("tiller-deploy.%s:44134" , * tillerNamespace ))
120
- if err != nil {
121
- log .Printf ("Failed to connect: %v" , err )
118
+ var clients []* helm.Client
119
+ tNamespaces := strings .Split (* tillerNamespace , "," )
122
120
123
- client , err = newHelmClient (localTiller )
121
+ for _ , np := range tNamespaces {
122
+ client , err := newHelmClient (fmt .Sprintf ("tiller-deploy.%s:44134" , np ))
124
123
if err != nil {
125
124
log .Printf ("Failed to connect: %v" , err )
126
- log .Fatalln ("Giving up." )
125
+
126
+ client , err = newHelmClient (localTiller )
127
+ if err != nil {
128
+ log .Printf ("Failed to connect: %v" , err )
129
+ log .Fatalln ("Giving up." )
130
+ }
127
131
}
132
+ clients = append (clients , client )
128
133
}
129
134
130
- http .HandleFunc ("/metrics" , newHelmStatsHandler (client ))
135
+ http .HandleFunc ("/metrics" , newHelmStatsHandler (clients ))
131
136
http .HandleFunc ("/healthz" , healthz )
132
137
http .ListenAndServe (":9571" , nil )
133
138
}
0 commit comments