Skip to content

Instantly share code, notes, and snippets.

View yuriatgoogle's full-sized avatar

Yuri Grinshteyn yuriatgoogle

View GitHub Profile
{
"name": "projects/<project number>/services/gae:<project ID>_default/serviceLevelObjectives/<SLO name>",
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"goodServiceFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" resource.type=\"gae_app\" resource.label.\"module_id\"=\"default\" metric.label.\"response_code\"=\"200\"",
"totalServiceFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" resource.type=\"gae_app\" resource.label.\"module_id\"=\"default\""
}
}
},
{
"serviceLevelIndicator": {
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" resource.type=\"gae_app\" resource.label.\"module_id\"=\"default\"",
"goodServiceFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" resource.type=\"gae_app\" resource.label.\"module_id\"=\"default\" metric.label.\"response_code\"=\"200\"",
}
}
},
"goal": 0.98,
"requestBased": {
"goodTotalRatio": {
"totalServiceFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" resource.type=\"gae_app\" resource.label.\"module_id\"=\"default\"",
"goodServiceFilter": "metric.type=\"appengine.googleapis.com/http/server/response_count\" resource.type=\"gae_app\" resource.label.\"module_id\"=\"default\" metric.label.\"response_code\"=\"200\"",
}
}
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func main() {
{
"displayName": "Automated Dashboard",
"root":
{
"title": "Automated Dashboard - Grid Layout",
"gridLayout" :
{
"columns": 4,
"widgets": [
{
app.get('/report-exception', (req, res) => {
res.send('exception');
errors.report(new Error('exception reported'));
})
app.get('/report-error', (req, res) => {
res.send('Stackdriver error reported!');
errors.report('Stackdriver error reported');
})
//************** Stackdriver Error Reporting setup ******** */
const errors = new ErrorReporting(
{
projectId: projectID,
reportMode: 'always',
serviceContext: {
service: serviceName,
version: '1'
}
}
app.get('/winston-error', (req, res) => {
winstonLogger.error('Winston error logged');
res.send('Winston error logged!');
})
// ************* Winston logging setup *****************
const loggingWinston = new LoggingWinston();
// Create a Winston logger that streams to Stackdriver Logging
const winstonLogger = winston.createLogger({
level: 'info',
transports: [
new winston.transports.Console(),
// Add Stackdriver Logging
loggingWinston,
],