@@ -2,6 +2,7 @@ package resolver
22
33import (
44 "encoding/json"
5+ "github.com/ActiveState/cli/cmd/state-svc/internal/rtusage"
56 "sort"
67 "time"
78
@@ -30,6 +31,8 @@ type Resolver struct {
3031 cfg * config.Instance
3132 depPoller * poller.Poller
3233 updatePoller * poller.Poller
34+ authPoller * poller.Poller
35+ usageChecker * rtusage.Checker
3336 projectIDCache * projectcache.ID
3437 an * sync.Client
3538 anForClient * sync.Client // Use separate client for events sent through service so we don't contaminate one with the other
@@ -49,11 +52,22 @@ func New(cfg *config.Instance, an *sync.Client, auth *authentication.Auth) (*Res
4952 return upchecker .Check ()
5053 })
5154
55+ pollAuth := poller .New (1 * time .Minute , func () (interface {}, error ) {
56+ if auth .SyncRequired () {
57+ return nil , auth .Sync ()
58+ }
59+ return nil , nil
60+ })
61+
62+ usageChecker := rtusage .NewChecker (cfg , auth )
63+
5264 anForClient := sync .New (cfg , auth )
5365 return & Resolver {
5466 cfg ,
5567 pollDep ,
5668 pollUpdate ,
69+ pollAuth ,
70+ usageChecker ,
5771 projectcache .NewID (),
5872 an ,
5973 anForClient ,
@@ -64,6 +78,7 @@ func New(cfg *config.Instance, an *sync.Client, auth *authentication.Auth) (*Res
6478func (r * Resolver ) Close () error {
6579 r .depPoller .Close ()
6680 r .updatePoller .Close ()
81+ r .authPoller .Close ()
6782 r .anForClient .Close ()
6883 return r .rtwatch .Close ()
6984}
@@ -158,16 +173,34 @@ func (r *Resolver) AnalyticsEvent(_ context.Context, category, action string, _l
158173 return & graph.AnalyticsEventResponse {Sent : true }, nil
159174}
160175
161- func (r * Resolver ) RuntimeUsage ( ctx context.Context , pid int , exec string , dimensionsJSON string ) (* graph.RuntimeUsageResponse , error ) {
176+ func (r * Resolver ) ReportRuntimeUsage ( _ context.Context , pid int , exec string , dimensionsJSON string ) (* graph.ReportRuntimeUsageResponse , error ) {
162177 logging .Debug ("Runtime usage resolver: %d - %s" , pid , exec )
163178 var dims * dimensions.Values
164179 if err := json .Unmarshal ([]byte (dimensionsJSON ), & dims ); err != nil {
165- return & graph.RuntimeUsageResponse {Received : false }, errs .Wrap (err , "Could not unmarshal" )
180+ return & graph.ReportRuntimeUsageResponse {Received : false }, errs .Wrap (err , "Could not unmarshal" )
166181 }
167182
168183 r .rtwatch .Watch (pid , exec , dims )
169184
170- return & graph.RuntimeUsageResponse {Received : true }, nil
185+ return & graph.ReportRuntimeUsageResponse {Received : true }, nil
186+ }
187+
188+ func (r * Resolver ) CheckRuntimeUsage (_ context.Context , organizationName string ) (* graph.CheckRuntimeUsageResponse , error ) {
189+ logging .Debug ("CheckRuntimeUsage resolver" )
190+
191+ usage , err := r .usageChecker .Check (organizationName )
192+ if err != nil {
193+ return nil , errs .Wrap (err , "Could not check runtime usage: %s" , errs .JoinMessage (err ))
194+ }
195+
196+ result := & graph.CheckRuntimeUsageResponse {
197+ Limit : int (usage .LimitDynamicRuntimes ),
198+ Usage : int (usage .ActiveDynamicRuntimes ),
199+ }
200+
201+ logging .Debug ("Returning %v, based on %v" , result , usage )
202+
203+ return result , nil
171204}
172205
173206func (r * Resolver ) CheckDeprecation (ctx context.Context ) (* graph.DeprecationInfo , error ) {
0 commit comments