-
Notifications
You must be signed in to change notification settings - Fork 51
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #656 from cloudfoundry/update-asat-app-dependencies
- Loading branch information
Showing
4,207 changed files
with
349,652 additions
and
92,468 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
name: eslint | ||
|
||
on: [pull_request] | ||
|
||
jobs: | ||
eslint: | ||
name: eslint | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
- name: setup node | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: '16' | ||
- run: npm install | ||
working-directory: src/acceptance/assets/app/nodeApp | ||
- uses: reviewdog/action-eslint@v1 | ||
with: | ||
workdir: "src/acceptance/assets/app/nodeApp" | ||
eslint_flags: '' | ||
fail_on_error: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"extends": "standard" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,188 +1,192 @@ | ||
var express = require('express'); | ||
var app = express(); | ||
const fs = require('fs').promises; | ||
var request = require('request'); | ||
var enableCpuTest = false; | ||
const os = require('os'); | ||
const cpuCount = os.cpus().length; | ||
const { Worker } = require("worker_threads"); | ||
|
||
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; | ||
const express = require('express') | ||
const app = express() | ||
const fs = require('fs') | ||
const https = require('https') | ||
const axios = require('axios') | ||
const os = require('os') | ||
const cpuCount = os.cpus().length | ||
const { BroadcastChannel, Worker } = require('worker_threads') | ||
|
||
app.get('/slow/:time', async function (req, res) { | ||
var delayInMS = parseInt(req.params.time, 10); | ||
await new Promise(done => setTimeout(done, delayInMS)); | ||
res.status(200).send('dummy application with slow response'); | ||
}); | ||
const delayInMS = parseInt(req.params.time, 10) | ||
await new Promise((resolve, reject) => { | ||
setTimeout(() => resolve(), delayInMS) | ||
}) | ||
res.status(200).send('dummy application with slow response') | ||
}) | ||
|
||
app.get('/fast', function (req, res) { | ||
res.status(200).send('dummy application with fast response'); | ||
}); | ||
res.status(200).send('dummy application with fast response') | ||
}) | ||
|
||
app.get('/health', function (req, res) { | ||
res.status(200).json({status: "OK", cpuTestRunning: enableCpuTest}); | ||
}); | ||
res.status(200).json({ status: 'OK' }) | ||
}) | ||
|
||
app.get('/', function (req, res) { | ||
res.status(200).send('dummy application root'); | ||
}); | ||
res.status(200).send('dummy application root') | ||
}) | ||
|
||
app.listen(process.env.PORT || 8080, function () { | ||
console.log('dummy application started'); | ||
}); | ||
console.log('dummy application started') | ||
}) | ||
|
||
app.get('/custom-metrics/:type/:value', function (req, res) { | ||
app.get('/custom-metrics/:type/:value', async function (req, res) { | ||
try { | ||
var metricType = req.params.type; | ||
var metricValue = parseInt(req.params.value, 10); | ||
var instanceIndex = process.env.CF_INSTANCE_INDEX; | ||
var appGuid = JSON.parse(process.env.VCAP_APPLICATION).application_id; | ||
|
||
var postData = { | ||
"instance_index": parseInt(instanceIndex), | ||
"metrics": [{ | ||
"name": metricType, | ||
"value": parseInt(metricValue), | ||
"unit": "test-unit" | ||
const metricType = req.params.type | ||
const metricValue = parseInt(req.params.value, 10) | ||
const instanceIndex = process.env.CF_INSTANCE_INDEX | ||
const appGuid = JSON.parse(process.env.VCAP_APPLICATION).application_id | ||
|
||
const postData = { | ||
instance_index: parseInt(instanceIndex), | ||
metrics: [{ | ||
name: metricType, | ||
value: parseInt(metricValue), | ||
unit: 'test-unit' | ||
}] | ||
} | ||
var credentials = {}; | ||
var metricsForwarderURL = ""; | ||
var mfUsername = ""; | ||
var mfPassword = ""; | ||
let credentials = {} | ||
let metricsForwarderURL = '' | ||
let mfUsername = '' | ||
let mfPassword = '' | ||
// for service offering | ||
if (process.env.VCAP_SERVICES) { | ||
var vcapServices = JSON.parse(process.env.VCAP_SERVICES); | ||
if (vcapServices.autoscaler && vcapServices.autoscaler[0] | ||
&& vcapServices.autoscaler[0].credentials) { | ||
credentials = vcapServices.autoscaler[0].credentials; | ||
metricsForwarderURL = credentials.custom_metrics.url; | ||
mfUsername = credentials.custom_metrics.username; | ||
mfPassword = credentials.custom_metrics.password; | ||
const vcapServices = JSON.parse(process.env.VCAP_SERVICES) | ||
if (vcapServices.autoscaler && vcapServices.autoscaler[0] && | ||
vcapServices.autoscaler[0].credentials) { | ||
credentials = vcapServices.autoscaler[0].credentials | ||
metricsForwarderURL = credentials.custom_metrics.url | ||
mfUsername = credentials.custom_metrics.username | ||
mfPassword = credentials.custom_metrics.password | ||
} | ||
} | ||
//for build-in offering | ||
if (metricsForwarderURL === "" || mfUsername === "" || mfPassword === "") { | ||
// for build-in offering | ||
if (metricsForwarderURL === '' || mfUsername === '' || mfPassword === '') { | ||
if (process.env.AUTO_SCALER_CUSTOM_METRIC_ENV) { | ||
credentials = JSON.parse(process.env.AUTO_SCALER_CUSTOM_METRIC_ENV); | ||
metricsForwarderURL = credentials.url; | ||
mfUsername = credentials.username; | ||
mfPassword = credentials.password; | ||
credentials = JSON.parse(process.env.AUTO_SCALER_CUSTOM_METRIC_ENV) | ||
metricsForwarderURL = credentials.url | ||
mfUsername = credentials.username | ||
mfPassword = credentials.password | ||
} else { | ||
console.log("Not all credentials!!!!"); | ||
console.log('Not all credentials!!!!') | ||
console.log( | ||
`metricsForwarderURL "${metricsForwarderURL}" || mfUsername === "${mfUsername}" || mfPassword "${mfPassword}`); | ||
`metricsForwarderURL "${metricsForwarderURL}" || mfUsername === "${mfUsername}" || mfPassword "${mfPassword}`) | ||
console.log(process.env.VCAP_SERVICES) | ||
res.status(500).json({error: "No credentials found"}) | ||
res.status(500).json({ error: 'No credentials found' }) | ||
return | ||
} | ||
} | ||
|
||
var options = { | ||
uri: metricsForwarderURL + '/v1/apps/' + appGuid + '/metrics', | ||
const options = { | ||
url: metricsForwarderURL + '/v1/apps/' + appGuid + '/metrics', | ||
method: 'POST', | ||
body: JSON.stringify(postData), | ||
data: postData, | ||
headers: { | ||
'Content-Type': 'application/json', | ||
'Authorization': 'Basic ' + Buffer.from( | ||
mfUsername + ":" + mfPassword).toString('base64') | ||
} | ||
Authorization: 'Basic ' + Buffer.from( | ||
mfUsername + ':' + mfPassword).toString('base64') | ||
}, | ||
validateStatus: null | ||
} | ||
request(options, function (err, result, body) { | ||
if (err || result.statusCode !== 200) { | ||
console.log(err); | ||
res.status(result.statusCode).json( | ||
{error: err, body: body, statusCode: result.statusCode}); | ||
} else { | ||
res.status(200).send("success"); | ||
const result = await axios(options) | ||
if (result.status !== 200) { | ||
console.log(`Got non-200 response ${result.status} response ${result.data}`) | ||
const payload = { | ||
statusCode: result.status, | ||
response: result.data | ||
} | ||
}); | ||
res.status(500).json(payload).end() | ||
} else { | ||
res.status(200).send('success') | ||
} | ||
} catch (err) { | ||
console.log(err); | ||
res.status(500).json({exception: JSON.stringify(err)}).end(); | ||
console.log(err) | ||
res.status(500).json({ exception: JSON.stringify(err) }).end() | ||
} | ||
}) | ||
|
||
app.get('/custom-metrics/mtls/:type/:value', async function (req, res) { | ||
try { | ||
var metricType = req.params.type; | ||
var metricValue = parseInt(req.params.value, 10); | ||
var instanceIndex = process.env.CF_INSTANCE_INDEX; | ||
var appGuid = JSON.parse(process.env.VCAP_APPLICATION).application_id; | ||
|
||
var postData = { | ||
"instance_index": parseInt(instanceIndex), | ||
"metrics": [{ | ||
"name": metricType, | ||
"value": parseInt(metricValue), | ||
"unit": "test-unit" | ||
}] | ||
} | ||
var credentials = {}; | ||
var metricsForwarderURL = ""; | ||
|
||
// for service offering | ||
if (process.env.VCAP_SERVICES) { | ||
var vcapServices = JSON.parse(process.env.VCAP_SERVICES); | ||
if (vcapServices.autoscaler && vcapServices.autoscaler[0] && vcapServices.autoscaler[0].credentials) { | ||
credentials = vcapServices.autoscaler[0].credentials; | ||
metricsForwarderURL = credentials.custom_metrics.mtls_url; | ||
} | ||
} | ||
|
||
var options = { | ||
uri: metricsForwarderURL + '/v1/apps/' + appGuid + '/metrics', | ||
method: 'POST', | ||
key: await fs.readFile(process.env.CF_INSTANCE_KEY), | ||
cert: await fs.readFile(process.env.CF_INSTANCE_CERT), | ||
body: JSON.stringify(postData), | ||
headers: { 'Content-Type': 'application/json' } | ||
} | ||
request(options, function (err, result, body) { | ||
if (err || result.statusCode > 299) { | ||
console.log("error: " + err) | ||
var payload = { | ||
err: err ? err.message : null, | ||
statusCode: result ? result.statusCode : null, | ||
response: body, | ||
} | ||
console.log(JSON.stringify(payload)); | ||
res.status(500).json(payload).end(); | ||
} else { | ||
res.status(200).send("success with mtls").end(); | ||
} | ||
}); | ||
|
||
}catch(err) { | ||
var payload = { exception: err }; | ||
console.log(payload); | ||
res.status(500).json(payload); | ||
try { | ||
const metricType = req.params.type | ||
const metricValue = parseInt(req.params.value, 10) | ||
const instanceIndex = process.env.CF_INSTANCE_INDEX | ||
const appGuid = JSON.parse(process.env.VCAP_APPLICATION).application_id | ||
|
||
const postData = { | ||
instance_index: parseInt(instanceIndex), | ||
metrics: [{ | ||
name: metricType, | ||
value: parseInt(metricValue), | ||
unit: 'test-unit' | ||
}] | ||
} | ||
}); | ||
let credentials = {} | ||
let metricsForwarderURL = '' | ||
|
||
// for service offering | ||
if (process.env.VCAP_SERVICES) { | ||
const vcapServices = JSON.parse(process.env.VCAP_SERVICES) | ||
if (vcapServices.autoscaler && vcapServices.autoscaler[0] && vcapServices.autoscaler[0].credentials) { | ||
credentials = vcapServices.autoscaler[0].credentials | ||
metricsForwarderURL = credentials.custom_metrics.mtls_url | ||
} | ||
} | ||
|
||
const httpsAgent = new https.Agent({ | ||
cert: fs.readFileSync(process.env.CF_INSTANCE_CERT), | ||
key: fs.readFileSync(process.env.CF_INSTANCE_KEY) | ||
}) | ||
const options = { | ||
url: metricsForwarderURL + '/v1/apps/' + appGuid + '/metrics', | ||
method: 'POST', | ||
data: postData, | ||
headers: { 'Content-Type': 'application/json' }, | ||
validateStatus: null, | ||
httpsAgent | ||
} | ||
const result = await axios(options) | ||
if (result.status !== 200) { | ||
console.log(`Got non-200 response ${result.status} response ${result.data}`) | ||
const payload = { | ||
statusCode: result.status, | ||
response: result.data | ||
} | ||
res.status(500).json(payload).end() | ||
} else { | ||
res.status(200).send('success with mtls').end() | ||
} | ||
} catch (err) { | ||
const payload = { exception: err } | ||
console.log(payload) | ||
res.status(500).json(payload) | ||
} | ||
}) | ||
|
||
app.get('/cpu/:util/:minute', async function (req, res) { | ||
var util = parseInt(req.params.util, 10); | ||
var minute = parseInt(req.params.minute, 10); | ||
var maxUtil = cpuCount * 100; | ||
util = Math.max(1, util); | ||
util = Math.min(maxUtil, util); | ||
var msg = 'set app cpu utilization to ' + util + '% for ' + minute + ' minutes'; | ||
maxWorkerUtil = 99; | ||
remainingUtil = util; | ||
let util = parseInt(req.params.util, 10) | ||
const minute = parseInt(req.params.minute, 10) | ||
const maxUtil = cpuCount * 100 | ||
util = Math.max(1, util) | ||
util = Math.min(maxUtil, util) | ||
const msg = 'set app cpu utilization to ' + util + '% for ' + minute + ' minutes' | ||
const maxWorkerUtil = 99 | ||
let remainingUtil = util | ||
while (remainingUtil > maxWorkerUtil) { | ||
workerUtil = maxWorkerUtil; | ||
startWorker(workerUtil, minute); | ||
remainingUtil = remainingUtil - maxWorkerUtil; | ||
startWorker(maxWorkerUtil, minute) | ||
remainingUtil = remainingUtil - maxWorkerUtil | ||
}; | ||
startWorker(remainingUtil, minute); | ||
res.status(200).send(msg); | ||
}); | ||
startWorker(remainingUtil, minute) | ||
res.status(200).send(msg) | ||
}) | ||
|
||
function startWorker(util, minute) { | ||
const worker = new Worker("./worker.js", { workerData: { util: util, minute: minute } }); | ||
function startWorker (util, minute) { | ||
new Worker('./worker.js', { workerData: { util, minute } }) // eslint-disable-line no-new | ||
} | ||
|
||
app.get('/cpu/close', async function (req, res) { | ||
enableCpuTest = false; | ||
res.status(200).send('close cpu test'); | ||
}); | ||
const bc = new BroadcastChannel('stop_channel') | ||
bc.postMessage('stop') | ||
|
||
res.status(200).send('close cpu test') | ||
}) |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.