4
4
"encoding/json"
5
5
"fmt"
6
6
"nets"
7
+ "os"
7
8
"strings"
8
9
"time"
9
10
@@ -14,9 +15,10 @@ import (
14
15
15
16
type Manager struct {
16
17
nets.BaseNet
17
- Config ManagerNetConfig
18
- metrics map [string ]* prometheus.GaugeVec
19
- token string
18
+ Config ManagerNetConfig
19
+ metrics map [string ]* prometheus.GaugeVec
20
+ cloudToken nets.Token
21
+ orgToken nets.Token
20
22
}
21
23
22
24
type ManagerNetConfig struct {
@@ -100,7 +102,6 @@ type ConfiguredGatewayService struct {
100
102
var version string
101
103
102
104
var invokeAPI = nets .InvokeAPI
103
- var getToken = nets .GetToken
104
105
105
106
var log = alog .UseChannel ("apim" )
106
107
@@ -127,9 +128,9 @@ func (m *Manager) registerMetrics() {
127
128
func (m * Manager ) getTopologyInfo (management_url string ) (CloudTopology , error ) {
128
129
129
130
url := fmt .Sprintf ("%s/api/cloud/topology" , management_url )
130
- log .Log (alog .DEBUG , url )
131
+ log .Log (alog .DEBUG2 , url )
131
132
132
- response , err := invokeAPI (url , "" , m .token )
133
+ response , err := invokeAPI (url , "" , m .cloudToken . Token )
133
134
if err != nil {
134
135
log .Log (alog .ERROR , err .Error ())
135
136
return CloudTopology {}, err
@@ -150,17 +151,17 @@ func (m *Manager) getTopologyInfo(management_url string) (CloudTopology, error)
150
151
func (m * Manager ) getWebhookStats (management_url string , org string , catalog string ) {
151
152
///api/catalogs/{}/{}/configured-gateway-services?fields=add(gateway_processing_status,events)
152
153
url := fmt .Sprintf ("%s/api/catalogs/%s/%s/configured-gateway-services?fields=add(gateway_processing_status,events)" , management_url , org , catalog )
153
- log .Log (alog .DEBUG , url )
154
+ log .Log (alog .DEBUG2 , url )
154
155
155
- response , err := invokeAPI (url , "" , m .token )
156
+ response , err := invokeAPI (url , "" , m .orgToken . Token )
156
157
if err != nil {
157
158
log .Log (alog .ERROR , err .Error ())
158
159
return
159
160
} else {
160
161
defer response .Body .Close ()
161
162
var cgsResponse ConfiguredGatewayServices
162
163
err = json .NewDecoder (response .Body ).Decode (& cgsResponse )
163
- log .Log (alog .DEBUG , "Webhook status total results:" , cgsResponse .TotalResults )
164
+ log .Log (alog .DEBUG , "Webhook status total results: %v " , cgsResponse .TotalResults )
164
165
for _ , cgs := range cgsResponse .Results {
165
166
m .metrics ["outstandingSent" ].WithLabelValues (org , catalog , cgs .Name , cgs .ServiceVersion ).Set (float64 (cgs .GatewayProcessingStatus .OutstandingSentEvents ))
166
167
m .metrics ["outstandingQueued" ].WithLabelValues (org , catalog , cgs .Name , cgs .ServiceVersion ).Set (float64 (cgs .GatewayProcessingStatus .OutstandingQueuedEvents ))
@@ -195,6 +196,33 @@ func (m *Manager) publishTopologyMetrics(topologyCount CountStruct, managementNa
195
196
m .metrics ["spaceGauge" ].WithLabelValues (managementName , managementNamespace , scope , name ).Set (topologyCount .Spaces )
196
197
}
197
198
199
+ func (m * Manager ) getTokens (management_url string ) error {
200
+ var err error
201
+
202
+ currentTimestamp := int (time .Now ().Unix ())
203
+
204
+ if m .cloudToken .Expires < currentTimestamp {
205
+ m .cloudToken , err = nets .GetToken (management_url , os .Getenv (("MGMT_CREDS" )))
206
+ if err != nil {
207
+ log .Log (alog .ERROR , err .Error ())
208
+ return err
209
+ }
210
+ } else {
211
+ log .Log (alog .DEBUG , "Using cached cloud token" )
212
+ }
213
+ if m .orgToken .Expires < currentTimestamp {
214
+ m .orgToken , err = nets .GetToken (management_url , os .Getenv (("ORG_CREDS" )))
215
+ if err != nil {
216
+ log .Log (alog .ERROR , err .Error ())
217
+ m .orgToken = m .cloudToken // If org creds are not set use cloud creds
218
+ log .Log (alog .WARNING , "Using cloud token for org level API calls as org creds are not set" )
219
+ }
220
+ } else {
221
+ log .Log (alog .DEBUG , "Using cached org token" )
222
+ }
223
+ return nil
224
+ }
225
+
198
226
func (m * Manager ) findAPIM () error {
199
227
200
228
apims := nets .GetCustomResourceList ("management.apiconnect.ibm.com" , "v1beta1" , "managementclusters" , m .Config .Namespace )
@@ -216,12 +244,7 @@ func (m *Manager) findAPIM() error {
216
244
}
217
245
log .Log (alog .INFO , "Override host set - using %s for manager" , m .Config .Host )
218
246
}
219
- var err error
220
- m .token , err = getToken (management_url )
221
- if err != nil {
222
- log .Log (alog .ERROR , err .Error ())
223
- return err
224
- }
247
+ m .getTokens (management_url )
225
248
topology , err := m .getTopologyInfo (management_url )
226
249
if err != nil {
227
250
log .Log (alog .ERROR , err .Error ())
0 commit comments