monitoring/snippets/uptime.js (207 lines of code) (raw):
// Copyright 2017 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* This application demonstrates how to perform basic operations on uptime check
* configs with the Google Stackdriver Monitoring API.
*
* For more information, see the README.md under /monitoring and the
* documentation at https://cloud.google.com/monitoring/uptime-checks/.
*/
'use strict';
async function createUptimeCheckConfig(projectId, hostname) {
// [START monitoring_uptime_check_create]
// Imports the Google Cloud client library
const monitoring = require('@google-cloud/monitoring');
// Creates a client
const client = new monitoring.UptimeCheckServiceClient();
/**
* TODO(developer): Uncomment and edit the following lines of code.
*/
// const projectId = 'YOUR_PROJECT_ID';
// const hostname = 'mydomain.com';
const request = {
// i.e. parent: 'projects/my-project-id'
parent: client.projectPath(projectId),
uptimeCheckConfig: {
displayName: 'My Uptime Check',
monitoredResource: {
// See the Uptime Check docs for supported MonitoredResource types
type: 'uptime_url',
labels: {
host: hostname,
},
},
httpCheck: {
path: '/',
port: 80,
},
timeout: {
seconds: 10,
},
period: {
seconds: 300,
},
},
};
// Creates an uptime check config for a GCE instance
const [uptimeCheckConfig] = await client.createUptimeCheckConfig(request);
console.log('Uptime check created:');
console.log(`ID: ${uptimeCheckConfig.name}`);
console.log(`Display Name: ${uptimeCheckConfig.displayName}`);
console.log('Resource: %j', uptimeCheckConfig.monitoredResource);
console.log('Period: %j', uptimeCheckConfig.period);
console.log('Timeout: %j', uptimeCheckConfig.timeout);
console.log(`Check type: ${uptimeCheckConfig.check_request_type}`);
console.log(
'Check: %j',
uptimeCheckConfig.httpCheck || uptimeCheckConfig.tcpCheck
);
console.log(
`Content matchers: ${uptimeCheckConfig.contentMatchers
.map(matcher => matcher.content)
.join(', ')}`
);
console.log(`Regions: ${uptimeCheckConfig.selectedRegions.join(', ')}`);
// [END monitoring_uptime_check_create]
}
async function listUptimeCheckConfigs(projectId) {
// [START monitoring_uptime_check_list_configs]
// Imports the Google Cloud client library
const monitoring = require('@google-cloud/monitoring');
// Creates a client
const client = new monitoring.UptimeCheckServiceClient();
/**
* TODO(developer): Uncomment and edit the following lines of code.
*/
// const projectId = 'YOUR_PROJECT_ID';
const request = {
parent: client.projectPath(projectId),
};
// Retrieves an uptime check config
const [uptimeCheckConfigs] = await client.listUptimeCheckConfigs(request);
uptimeCheckConfigs.forEach(uptimeCheckConfig => {
console.log(`ID: ${uptimeCheckConfig.name}`);
console.log(` Display Name: ${uptimeCheckConfig.displayName}`);
console.log(' Resource: %j', uptimeCheckConfig.monitoredResource);
console.log(' Period: %j', uptimeCheckConfig.period);
console.log(' Timeout: %j', uptimeCheckConfig.timeout);
console.log(` Check type: ${uptimeCheckConfig.check_request_type}`);
console.log(
' Check: %j',
uptimeCheckConfig.httpCheck || uptimeCheckConfig.tcpCheck
);
console.log(
` Content matchers: ${uptimeCheckConfig.contentMatchers
.map(matcher => matcher.content)
.join(', ')}`
);
console.log(` Regions: ${uptimeCheckConfig.selectedRegions.join(', ')}`);
});
// [END monitoring_uptime_check_list_configs]
}
async function listUptimeCheckIps() {
// [START monitoring_uptime_check_list_ips]
// Imports the Google Cloud client library
const monitoring = require('@google-cloud/monitoring');
// Creates a client
const client = new monitoring.UptimeCheckServiceClient();
// List uptime check IPs
const [uptimeCheckIps] = await client.listUptimeCheckIps();
uptimeCheckIps.forEach(uptimeCheckIp => {
console.log(
uptimeCheckIp.region,
uptimeCheckIp.location,
uptimeCheckIp.ipAddress
);
});
// [END monitoring_uptime_check_list_ips]
}
async function getUptimeCheckConfig(projectId, uptimeCheckConfigId) {
// [START monitoring_uptime_check_get]
// Imports the Google Cloud client library
const monitoring = require('@google-cloud/monitoring');
// Creates a client
const client = new monitoring.UptimeCheckServiceClient();
/**
* TODO(developer): Uncomment and edit the following lines of code.
*/
// const projectId = 'YOUR_PROJECT_ID';
// const uptimeCheckConfigId = 'YOUR_UPTIME_CHECK_CONFIG_ID';
const request = {
// i.e. name: 'projects/my-project-id/uptimeCheckConfigs/My-Uptime-Check
name: client.projectUptimeCheckConfigPath(projectId, uptimeCheckConfigId),
};
console.log(`Retrieving ${request.name}`);
// Retrieves an uptime check config
const [uptimeCheckConfig] = await client.getUptimeCheckConfig(request);
console.log(`ID: ${uptimeCheckConfig.name}`);
console.log(`Display Name: ${uptimeCheckConfig.displayName}`);
console.log('Resource: %j', uptimeCheckConfig.monitoredResource);
console.log('Period: %j', uptimeCheckConfig.period);
console.log('Timeout: %j', uptimeCheckConfig.timeout);
console.log(`Check type: ${uptimeCheckConfig.check_request_type}`);
console.log(
'Check: %j',
uptimeCheckConfig.httpCheck || uptimeCheckConfig.tcpCheck
);
console.log(
`Content matchers: ${uptimeCheckConfig.contentMatchers
.map(matcher => matcher.content)
.join(', ')}`
);
console.log(`Regions: ${uptimeCheckConfig.selectedRegions.join(', ')}`);
// [END monitoring_uptime_check_get]
}
async function deleteUptimeCheckConfig(projectId, uptimeCheckConfigId) {
// [START monitoring_uptime_check_delete]
// Imports the Google Cloud client library
const monitoring = require('@google-cloud/monitoring');
// Creates a client
const client = new monitoring.UptimeCheckServiceClient();
/**
* TODO(developer): Uncomment and edit the following lines of code.
*/
// const projectId = 'YOUR_PROJECT_ID';
// const uptimeCheckConfigId = 'YOUR_UPTIME_CHECK_CONFIG_ID';
const request = {
// i.e. name: 'projects/my-project-id/uptimeCheckConfigs/My-Uptime-Check
name: client.projectUptimeCheckConfigPath(projectId, uptimeCheckConfigId),
};
console.log(`Deleting ${request.name}`);
// Delete an uptime check config
await client.deleteUptimeCheckConfig(request);
console.log(`${request.name} deleted.`);
// [END monitoring_uptime_check_delete]
}
async function updateUptimeCheckConfigDisplayName(
projectId,
uptimeCheckConfigId,
displayName,
path
) {
// [START monitoring_uptime_check_update]
// Imports the Google Cloud client library
const monitoring = require('@google-cloud/monitoring');
// Creates a client
const client = new monitoring.UptimeCheckServiceClient();
/**
* TODO(developer): Uncomment and edit the following lines of code.
*/
// const projectId = 'YOUR_PROJECT_ID';
// const uptimeCheckConfigId = 'YOUR_UPTIME_CHECK_CONFIG_ID';
// const displayName = 'A New Display Name';
// const path = '/some/path';
const request = {
// i.e. name: 'projects/my-project-id/uptimeCheckConfigs/My-Uptime-Check
name: client.projectUptimeCheckConfigPath(projectId, uptimeCheckConfigId),
};
console.log(`Updating ${request.name} to ${displayName}`);
// Updates the display name and path on an uptime check config
request.uptimeCheckConfig = {
name: request.name,
displayName: displayName,
httpCheck: {
path: path,
},
};
request.updateMask = {
paths: ['display_name', 'http_check.path'],
};
const [response] = await client.updateUptimeCheckConfig(request);
console.log(`${response.name} config updated.`);
// [END monitoring_uptime_check_update]
}
require('yargs')
.demand(1)
.command(
'create <hostname> [projectId]',
'Creates an uptime check config.',
{},
opts => createUptimeCheckConfig(opts.projectId, '' + opts.hostname)
)
.command('list [projectId]', 'Lists uptime check configs.', {}, opts =>
listUptimeCheckConfigs(opts.projectId)
)
.command('list-ips', 'Lists uptime check config IPs.', {}, () =>
listUptimeCheckIps()
)
.command(
'get <uptimeCheckConfigId> [projectId]',
'Gets an uptime check config.',
{},
opts => getUptimeCheckConfig(opts.projectId, opts.uptimeCheckConfigId)
)
.command(
'delete <uptimeCheckConfigId> [projectId]',
'Deletes an uptime check config.',
{},
opts => deleteUptimeCheckConfig(opts.projectId, opts.uptimeCheckConfigId)
)
.command(
'update <uptimeCheckConfigId> <displayName> <path> [projectId]',
'Update the display name of an uptime check config.',
{},
opts =>
updateUptimeCheckConfigDisplayName(
opts.projectId,
opts.uptimeCheckConfigId,
opts.displayName,
opts.path
)
)
.options({
projectId: {
alias: 'p',
default: process.env.GCLOUD_PROJECT || process.env.GOOGLE_CLOUD_PROJECT,
global: true,
requiresArg: true,
type: 'string',
},
})
.example('node $0 create mydomain.com', 'Create an uptime check.')
.example('node $0 list', 'List all uptime check configs.')
.example(
'node $0 list "resource.type = gce_instance AND resource.label.instance_id = mongodb"',
'List all uptime check configs for a specific GCE instance.'
)
.example('node $0 list-ips')
.example('node $0 get My-Uptime-Check')
.example('node $0 delete My-Uptime-Check')
.example('node $0 update My-Uptime-Check "My New Uptime Check" /some/path')
.wrap(120)
.recommendCommands()
.epilogue(
'For more information, see https://cloud.google.com/monitoring/uptime-checks/'
)
.help()
.strict().argv;