Created
January 14, 2020 06:32
-
-
Save tanaka-takayoshi/e00d7e8a4ec2fff521204bf9d69e12fa to your computer and use it in GitHub Desktop.
This file contains hidden or 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
var assert = require('assert'); | |
var request = require('request'); | |
var util = require('util'); | |
const requestPromise = util.promisify(request); | |
var urlsToMonitor = ['https://blog.newrelic.co.jp/', 'https://docs.newrelic.co.jp/']; | |
var insightKey = $secure.INSIGHTKEY; | |
var accountId = $secure.ACCOUNTID; | |
function treatAsUTC(date) { | |
var result = new Date(date); | |
result.setMinutes(result.getMinutes() - result.getTimezoneOffset()); | |
return result; | |
} | |
function daysBetween(startDate, endDate) { | |
var millisecondsPerDay = 24 * 60 * 60 * 1000; | |
return Math.round((treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay); | |
} | |
function insertInsightsEvent(urlMonitored, certificateIssuer, daysToExpiration, expirationMilliseconds){ | |
var options = { | |
uri: `https://insights-collector.newrelic.com/v1/accounts/${accountId}/events`, | |
body: JSON.stringify([{ | |
'eventType': 'SSLCertificateCheck', | |
'Url': urlMonitored, | |
'Issuer': certificateIssuer, | |
'DaysToExpiration': daysToExpiration, | |
'ExpirationDate': expirationMilliseconds | |
} | |
]), | |
// '[{"eventType":"SSLCertificateCheck","Url":"'+urlMonitored+'","Issuer":"'+certificateIssuer+'","DaysToExpiration":'+daysToExpiration+', "ExpirationDate":'+expirationMilliseconds+'}]', | |
headers:{ | |
'X-Insert-Key': insightKey, | |
'Content-Type': 'application/json' | |
} | |
}; | |
console.log("Posting event for: "+urlMonitored); | |
request.post(options, function(error,response, body){ | |
console.log(response.statusMessage); | |
console.log(`status code: ${response.statusCode}`); | |
assert.ok(response.statusCode == 200, `${urlMonitored}のInsight Custom Eventの送信ステータスが200以外です`); | |
var info = JSON.parse(body); | |
assert.ok(info.success == true, `${urlMonitored}のInsight Custom Eventの送信結果にtrue以外のレスポンスが含まれています: ${info.success}`); | |
console.log('SSL cert check が完了してCustom Eventの送信が完了しました'); | |
}); | |
} | |
function processSite(urlToMonitor) | |
{ | |
console.log(`チェック対象のサイト]: ${urlToMonitor}`); | |
var options = { | |
url: urlToMonitor, | |
method: 'HEAD', | |
gzip: true, | |
followRedirect: false, | |
followAllRedirects: false | |
}; | |
requestPromise(options).then((response) => { | |
var certDetails = (response.req.connection.getPeerCertificate()); | |
var currentDate = new Date(); | |
var certExpirationDate = new Date(certDetails.valid_to); | |
var daysToExpiration = daysBetween(currentDate, certExpirationDate); | |
var certificateIssuer = certDetails.issuer.O; | |
console.log(`証明書発行元: ${certificateIssuer}`); | |
console.log(`証明書期限日 ${certExpirationDate}`); | |
console.log(`テスト実施日: ${currentDate}`); | |
console.log(`失効するまであと ${daysToExpiration}日`); | |
console.log(`${options.url}のCustom EventをInsightに送信します...`); | |
insertInsightsEvent(options.url, certificateIssuer, daysToExpiration, certExpirationDate.getTime()); | |
}).catch((error) => { | |
assert.fail(error); | |
}); | |
} | |
urlsToMonitor.forEach(url => {processSite(url)}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment