Autoscaling Recommendation
https://github.com/pivotal-cf/cf-autoscaling-release/blob/03116cde866c07a109623294f4599f128ff1ff30/doc/max_per_source.md
HTML
<h2>Loggregator Settings</h2>
<div class="row">
<div class="column">
<label for="log_cache_request_time">Log Cache Request Time</label>
</div>
<div class="column">
<input type="text" id="log_cache_request_time" />
</div>
</div>
<div class="row">
<div class="column">
<label for="max_per_source">Max Per Source</label>
</div>
<div class="column">
<input type="text" id="max_per_source" />
</div>
</div>
<h2>Autoscaler Settings</h2>
<div class="row">
<div class="column">
<label for="metric_collection_interval">Metric Collection Interval</label>
</div>
<div class="column">
<input type="text" id="metric_collection_interval" />
</div>
</div>
<div class="row">
<div class="column">
<label for="scaling_interval">Scaling Interval</label>
</div>
<div class="column">
<input type="text" id="scaling_interval" />
</div>
</div>
<h2>Application Settings</h2>
<div class="row">
<div class="column">
<label for="metrics_per_request">Metrics per Request</label>
</div>
<div class="column">
<input type="text" id="metrics_per_request" />
</div>
</div>
<div class="row">
<div class="column">
<label for="application_requests_per_second">Application Requests per Second</label>
</div>
<div class="column">
<input type="text" id="application_requests_per_second" />
</div>
</div>
<div class="row">
<div class="column"></div>
<div class="column">
<button id="run" onclick="run()">Calculate</button>
</div>
</div>
<div class="row">
<div class="column"><label for="answer">Answer</label></div>
<div class="column">
<input id="answer" />
</div>
</div>
CSS
.row {
display: flex;
padding-top: 0.5em;
padding-bottom: 0.25em;
}
.column {
flex: 50%;
}
label {
font-weight: bold;
}
input {
width: 300px;
}
JavaScript
function run() {
var log_cache_request_time = document.getElementById("log_cache_request_time").value;
var max_per_source = document.getElementById("max_per_source").value;
var metric_collection_interval = document.getElementById("metric_collection_interval").value;
var scaling_interval = document.getElementById("scaling_interval").value;
var metrics_per_request = document.getElementById("metrics_per_request").value;
var application_requests_per_second = document.getElementById("application_requests_per_second").value;
var answer = document.getElementById("answer");
if (!log_cache_request_time || !max_per_source) {
answer.value = "Loggregator Settings are required";
return;
}
if (!metric_collection_interval || !scaling_interval) {
answer.value = "Autoscaler Settings are required";
return;
}
if (!metrics_per_request || !application_requests_per_second) {
answer.value = "Application Settings are required";
return;
}
var remove_up_to_pos = (max_per_source - (application_requests_per_second * metrics_per_request * (scaling_interval - 5)));
var pos_read_up_to = (Math.min(application_requests_per_second * metrics_per_request * metric_collection_interval, max_per_source) -
round(((scaling_interval - 5) / log_cache_request_time) * 1000));
answer.value = remove_up_to_pos + " > " + pos_read_up_to + " == " + (remove_up_to_pos > pos_read_up_to);
}
function round(value) {
return Math.floor(value / 1000) * 1000;
}