forked from Azumaxoid/NRQLAggregator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
monitor_script.js
72 lines (68 loc) · 3.23 KB
/
monitor_script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/***
* データ収集に必要な設定
***/
// データを収取するアカウントのID
const accountId = 3338940;
// New Relicの情報を汎用的に収集できるNerdGraphを利用します。これはユーザーに結びつくキーです。
// ない場合は、https://one.newrelic.com/admin-portal/api-keys/home で作成してください。
const userKey = $secure.NR_USER_KEY
// データを収集するためのNRQLです。収集したデータを利用しやすくするために、'as ***'というエイリアスをつけてください。
// FACETで指定した値を属性情報として追加したい場合、SELECT区にlatest()で同じ属性を追加してください。
const nrql = 'SELECT count(*) as cnt, latest(appName) as appName, latest(name) as name FROM Transaction FACET appName, name SINCE 1 hours ago'
/***
* 集約データを保存するために必要な設定
***/
// データを保存するアカウントのID. データ収集を行うアカウントと同じにしていますが、変更しても良いです。
const destAccountId = accountId;
// destAccountIdのアカウントへ保存するためのKeyが必要です。
// ない場合は、https://insights.newrelic.com/accounts/{あなたのアカウントID}/manage/api_keys でinsert keyを作成してください。
const ingestKey = $secure.NR_INSIGHTS_KEY
// データ保存先のイベントタイプ名
const eventType = 'SampleEvent'
var assert = require('assert');
// Get repositories
var http = {
getJson: (url)=> new Promise(r=>$http.get(url, { headers: { 'Content-Type': 'application/json' , 'User-Agent': 'nr-github-integration'}, responseType: 'json'}, function (err, response, body) {
assert.equal(response.statusCode, 200, 'Expected a 200 OK response');
r(JSON.parse(body));
})),
nrql: (accountId, NRQL) => {
return new Promise((res, rev)=> {
$http.post('https://api.newrelic.com/graphql',{
json: {query: `{actor{account(id: ${accountId}) {nrql(query: "${NRQL}") {results}}}}`},
headers: {'Content-Type': 'application/json','API-Key': userKey}
}, (err, response, body) => {
assert.equal(response.statusCode, 200, 'Expected a 200 OK response')
if (err || body.errors) {
console.error(body.errors.message);
assert.fail(`NRQL get data request was failed : (${NRQL})`);
}
res(body);
});
});
},
storeEvent: (accountId, data) => {
return new Promise((res, rev) => {
$http.post(`https://insights-collector.newrelic.com/v1/accounts/${accountId}/events`,
{ json: data, headers: { 'Content-Type': 'application/json', 'API-Key': ingestKey } },
(err, response, body) => {
if (err) {
assert.fail('Metrics post request was failed');
}
res(body);
});
});
}
};
async function run() {
var stored = await http.nrql(accountId, nrql);
console.log(stored)
const events = stored.data.actor.account.nrql.results.map(result =>{
const newEvent = { eventType }
Object.entries(result).filter(entry => entry[0] !== 'facet').forEach(entry => newEvent[entry[0]] = entry[1])
return newEvent
})
http.storeEvent(accountId, events);
$util.insights.set('storedEvents', events.length);
}
run();