How lauraindabur/auto-scaling-controller works
This repository is an AWS horizontal auto-scaling controller. Its principal workflow polls for completed CloudWatch periods, validates metric freshness and completeness, derives reactive CPU and proactive demand signals, combines them under safety guards, then adjusts ASG desired capacity and records the cycle. Startup restores policy and guard state from a local JSON file. The repository also documents a Flask workload target and a k6 scenario-based load experiment. Some implementation headers were not sampled, so links among policy internals and unsampled integrations are omitted rather than inferred.
Main entry points: DecisionEngine.hpp Decision Engine · main.cpp Controller Loop · CloudWatchMetricSource.cpp CloudWatch Metric Source · StateStore.cpp State Store
Components 23
Controller Runtime
- Controller Loop
src/main.cpp - Decision Engine
include/DecisionEngine.hpp - Environment Config
include/Config.hpp - Decision Logger
src/Logger.cpp - Decision Log
- State Store
src/StateStore.cpp - Persisted State
Decision Logic
- Metric Quality
include/DataQuality.hpp - Reactive Policy
include/ReactivePolicy.hpp - Moving Average
include/MovingAverage.hpp - Proactive Policy
include/ProactivePolicy.hpp - Holt Forecast
include/HoltForecaster.hpp - Decision Combiner
include/DecisionCombiner.hpp - Safety Guards
include/SafetyGuards.hpp
AWS Integrations
- CloudWatch Metric Source
src/CloudWatchMetricSource.cpp - ASG Actuator
src/ASGActuator.cpp
Workload Experiment
- k6 Load Scenario
loadtest/k6/escenario_completo.js - Scenario Profile
loadtest/scenarios/escenario_completo.csv - Flask Workload App
infra/app/app.py
Other components
- Operator
- CloudWatch
- Auto Scaling Group
- Application Load Balancer
Connections 25
- Operator → Controller Loop: starts
- Controller Loop → Environment Config: loads settings
- Controller Loop → State Store: loads state
- State Store → Persisted State: reads / writes
- Controller Loop → Decision Engine: runs loop
- Controller Loop → Reactive Policy: restores policy
- Controller Loop → Proactive Policy: restores policy
- Controller Loop → Holt Forecast: restores forecast
- Decision Engine → CloudWatch Metric Source: requests snapshot
- CloudWatch Metric Source → CloudWatch: queries metrics
- CloudWatch Metric Source → Auto Scaling Group: describes group
- Decision Engine → Metric Quality: evaluates snapshot
- Decision Engine → Reactive Policy: updates signal
- Reactive Policy → Moving Average: maintains window
- Decision Engine → Proactive Policy: updates signal
- Decision Engine → Decision Combiner: combines signals
- Decision Combiner → Safety Guards: checks actions
- Decision Engine → ASG Actuator: requests capacity
- ASG Actuator → Auto Scaling Group: sets desired capacity
- Decision Engine → Decision Logger: records decision
- Decision Logger → Decision Log: writes entries
- Decision Engine → State Store: persists controller state
- k6 Load Scenario → Scenario Profile: reads phases
- k6 Load Scenario → Application Load Balancer: sends HTTP load
- Application Load Balancer → Flask Workload App: routes requests