app/controllers/Prism.scala (93 lines of code) (raw):

package controllers import agent.{Accounts, CollectorAgent, SourceStatusAgent} import org.apache.pekko.actor.ActorSystem import collectors._ import conf.PrismConfiguration import utils.StopWatch // TODO: Maybe we should refactor this to be PrismAgents and to not be in the controllers package? class Prism(prismConfiguration: PrismConfiguration)(actorSystem: ActorSystem) { val prismRunTimeStopWatch = new StopWatch() val sourceStatusAgent = new SourceStatusAgent(actorSystem, prismRunTimeStopWatch) val accounts = new Accounts(prismConfiguration) val lazyStartup: Boolean = prismConfiguration.accounts.lazyStartup // TODO: Maybe we should refactor this to not require a circular reference / pass in this val instanceAgent = new CollectorAgent[Instance]( new InstanceCollectorSet(accounts, this), sourceStatusAgent, lazyStartup )(actorSystem) val lambdaAgent = new CollectorAgent[Lambda]( new LambdaCollectorSet(accounts), sourceStatusAgent, lazyStartup )(actorSystem) val dataAgent = new CollectorAgent[Data]( new DataCollectorSet(accounts), sourceStatusAgent, lazyStartup )(actorSystem) val securityGroupAgent = new CollectorAgent[SecurityGroup]( new SecurityGroupCollectorSet(accounts, this), sourceStatusAgent, lazyStartup )(actorSystem) val imageAgent = new CollectorAgent[Image]( new ImageCollectorSet(accounts), sourceStatusAgent, lazyStartup )(actorSystem) val launchConfigurationAgent = new CollectorAgent[LaunchConfiguration]( new LaunchConfigurationCollectorSet(accounts), sourceStatusAgent, lazyStartup )(actorSystem) val launchTemplateAgent = new CollectorAgent[LaunchTemplateVersion]( new LaunchTemplateCollectorSet(accounts), sourceStatusAgent, lazyStartup )(actorSystem) val acmCertificateAgent = new CollectorAgent[AcmCertificate]( new AmazonCertificateCollectorSet(accounts), sourceStatusAgent, lazyStartup )(actorSystem) val route53ZoneAgent = new CollectorAgent[Route53Zone]( new Route53ZoneCollectorSet(accounts), sourceStatusAgent, lazyStartup )(actorSystem) val elbAgent = new CollectorAgent[LoadBalancer]( new LoadBalancerCollectorSet(accounts), sourceStatusAgent, lazyStartup )(actorSystem) val bucketAgent = new CollectorAgent[Bucket]( new BucketCollectorSet(accounts), sourceStatusAgent, lazyStartup )(actorSystem) val reservationAgent = new CollectorAgent[Reservation]( new ReservationCollectorSet(accounts), sourceStatusAgent, lazyStartup )(actorSystem) val vpcAgent = new CollectorAgent[Vpc]( new VpcCollectorSet(accounts), sourceStatusAgent, lazyStartup )(actorSystem) val allAgents = Seq( instanceAgent, lambdaAgent, dataAgent, securityGroupAgent, imageAgent, launchConfigurationAgent, launchTemplateAgent, acmCertificateAgent, route53ZoneAgent, elbAgent, bucketAgent, reservationAgent, vpcAgent ) }