Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Logging API example. #53

Merged
merged 1 commit into from
Jan 19, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion computeengine/sendgrid/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"private": true,
"license": "Apache Version 2.0",
"engines": {
"node": "~4.2"
"node": ">=0.10.x"
},
"dependencies": {
"sendgrid": "^2.0.0"
Expand Down
6 changes: 6 additions & 0 deletions datastore/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
## Datastore Samples

These samples require two environment variables to be set:

- `GOOGLE_APPLICATION_CREDENTIALS` - Path to a service account file. You can
download one from your Google project's "permissions" page.
- `TEST_PROJECT_ID` - Id of your Google project.

## Run a sample

Install dependencies:
Expand Down
7 changes: 5 additions & 2 deletions datastore/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"engines": {
"node": ">=0.10.x"
},
"scripts": {
"tasks": "node tasks.js"
},
"dependencies": {
"async": "^1.5.0",
"gcloud": "^0.25.0"
"async": "^1.5.2",
"gcloud": "^0.27.0"
}
}
25 changes: 25 additions & 0 deletions logging/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
## Logging Samples

These samples require two environment variables to be set:

- `GOOGLE_APPLICATION_CREDENTIALS` - Path to a service account file. You can
download one from your Google project's "permissions" page.
- `TEST_PROJECT_ID` - Id of your Google project.

## Run a sample

Install dependencies:

npm install

To print available commands:

npm run

Execute a sample:

npm run <sample>

Example:

npm run write
92 changes: 92 additions & 0 deletions logging/export.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
// Copyright 2016, Google, Inc.
// 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.

'use strict';

// [START setup]
var projectId = process.env.TEST_PROJECT_ID;
var keyFilename = process.env.GOOGLE_APPLICATION_CREDENTIALS;

projectId = projectId || '<your-project-id>';
keyFilename = keyFilename || '/path/to/keyfile.json';

var gcloud = require('gcloud')({
projectId: projectId,
keyFilename: keyFilename
});

var logging = gcloud.logging();
// [END setup]

// [START listSinks]
function listSinks(callback) {
// list all sinks in the project
logging.getSinks(callback);
}
// [END listSinks]

// [START createSink]
function createSink(callback) {
var gcs = gcloud.storage();

// create a new sink
//
// This method only works if you are authenticated as yourself, e.g. using the

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know, that's what the cloud-node logging docs say.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

// gcloud SDK.
logging.createSink('mySink', {
destination: gcs.bucket('logging-bucket')
}, callback);
}
// [END createSink]

// [START updateSink]
function updateSink(callback) {
var gcs = gcloud.storage();
var sink = logging.sink('mySink');

// update a sink
//
// This method only works if you are authenticated as yourself, e.g. using the
// gcloud SDK.
sink.setMetadata({
// change destination to something else
destination: gcs.bucket('other-logging-bucket')
}, callback);
}
// [END updateSink]

// [START deleteSink]
function deleteSink(callback) {
var sink = logging.sink('mySink');

// delete a sink
//
// This method only works if you are authenticated as yourself, e.g. using the
// gcloud SDK.
sink.delete(callback);
}
// [END deleteSink]

exports.listSinks = listSinks;
exports.createSink = createSink;
exports.updateSink = updateSink;
exports.deleteSink = deleteSink;

if (module === require.main) {
listSinks(function (err, sinks, apiResponse) {
console.log(err, 'sinks:', sinks, 'apiResponse:', apiResponse);
if (err) {
return;
}
});
}
48 changes: 48 additions & 0 deletions logging/list.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// Copyright 2016, Google, Inc.
// 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.

'use strict';

// [START list]
// [START auth]
var projectId = process.env.TEST_PROJECT_ID;
var keyFilename = process.env.GOOGLE_APPLICATION_CREDENTIALS;

projectId = projectId || '<your-project-id>';
keyFilename = keyFilename || '/path/to/keyfile.json';

// [START require]
var gcloud = require('gcloud')({
projectId: projectId,
keyFilename: keyFilename
});
// [END require]
// [END auth]

var logging = gcloud.logging();

function list(callback) {
// Retrieve 3 log entries.
logging.getEntries({
pageSize: 3
}, callback);
}
// [END list]

exports.list = list;

if (module === require.main) {
list(function (err, apiResponse) {
console.log(err, 'apiResponse:', apiResponse);
});
}
18 changes: 18 additions & 0 deletions logging/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "nodejs-docs-samples-logging",
"description": "Node.js samples for Google Cloud Logging.",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"engines": {
"node": ">=0.10.x"
},
"scripts": {
"list": "node list.js",
"write": "node write.js",
"export": "node export.js"
},
"dependencies": {
"gcloud": "^0.27.0"
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

engines?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do I need engines?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't we at least specify a minimum node version?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd prefer to provide a minimum version in engines as well.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's unnecessary, but if you guys want it, what version do you want me to specify? It's being tested on v0.10, v0.12, and v5.x

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lol. I can't move on to anything else until I comment on how much I don't want to add this field.

My stance is that for samples where we actually invite the user to consume and/or deploy (like when there's an app.yaml file) then we should specify the engines field. e.g. The package.json for gcloud should specify engines, our MVMs samples should specify engines, etc.

Otherwise, for these samples, it's just bloat, something to be maintained and verified (or not). This sample is not going to be installed by NPM or consumed by a deploy or executed by some platform. There isn't anything that's going to programmatically read that field, only eyeballs will see it. I can set engines to 0.6.x and run it with via NPM with Node v5 and NPM doesn't care. If I set it to >=0.12, that implies it only works on >=0.12, which isn't true. I fail to see a benefit that outweighs the cost of maintaining a magic number across dozens of samples.

It is a strange fate we should suffer so much fear and doubt… over so small a thing.

-- Boromir

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would argue that we do want these samples to be consumable. All of the python samples are runnable applications with their own dependencies.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure these samples can be run locally and have their own dependencies, but nothing about that cares about the engines field.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am neutral :) Whatever y'all decide is fine by me.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added the engines field, but set it to >= 0.10.x, since that's the earliest version the samples are being tested on (also tested on 0.12 and 5)

}
86 changes: 86 additions & 0 deletions logging/write.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
// Copyright 2016, Google, Inc.
// 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.

/* jshint camelcase:false */
'use strict';

// [START write]
// [START setup]
var projectId = process.env.TEST_PROJECT_ID;
var keyFilename = process.env.GOOGLE_APPLICATION_CREDENTIALS;

projectId = projectId || '<your-project-id>';
keyFilename = keyFilename || '/path/to/keyfile.json';

var gcloud = require('gcloud')({
projectId: projectId,
keyFilename: keyFilename
});

var logging = gcloud.logging();
// [END setup]

function write(callback) {
var log = logging.log('myLog');

// Modify this resource type to match a resource in your project
// See https://cloud.google.com/logging/docs/api/ref_v2beta1/rest \
// /v2beta1/monitoredResourceDescriptors/list
var resource = {
type: 'gae_app',
labels: {
module_id: 'default',
version_id: 'express'
}
};

var entry = log.entry(resource, {
foo: 'bar'
});

var secondEntry = log.entry(resource, {
beep: 'boop'
});

// You can log multiple entries one at a a time, but it is best to write
// multiple entires together in a batch.
log.write([
entry,
secondEntry
], callback);
}
// [END write]

// [START deleteLog]
function deleteLog(callback) {
var log = logging.log('myLog');

// Delete the logs
log.delete(callback);
}
// [END deleteLog]

exports.write = write;
exports.deleteLog = deleteLog;

if (module === require.main) {
write(function (err, apiResponse) {
console.log(err, 'apiResponse:', apiResponse);
if (err) {
return;
}
deleteLog(function (err, apiResponse) {
console.log(err, 'apiResponse:', apiResponse);
});
});
}
11 changes: 6 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,19 @@
"deps_datastore": "cd datastore && npm i && cd ../..",
"deps_storage": "cd storage && npm i && cd ../..",
"deps_prediction": "cd prediction && npm i && cd ../..",
"deps_logging": "cd logging && npm i && cd ../..",
"deps_express": "cd appengine/express && npm i && cd ../..",
"deps_sendgrid": "cd appengine/sendgrid && npm i && cd ../.. && cd computeengine/sendgrid && npm i && cd ../..",
"deps_memcached": "cd appengine/express-memcached-session && npm i && cd ../..",
"pretest_geddy": "cd appengine/geddy && npm i geddy; GEDDY_SECRET=config/secrets.json; [[ -f $GEDDY_SECRET ]] || echo '{}' > $GEDDY_SECRET && node node_modules/.bin/geddy gen secret; cd ../..;",
"pretest": "npm run deps_datastore && npm run deps_storage && npm run deps_prediction && npm run deps_memcached && npm run deps_express && npm run deps_sendgrid && npm run pretest_geddy",
"pretest": "npm run deps_datastore && npm run deps_storage && npm run deps_prediction && npm run deps_logging && npm run deps_memcached && npm run deps_express && npm run deps_sendgrid && npm run pretest_geddy",
"test": "npm run jshint && npm run cover"
},
"devDependencies": {
"async": "^1.5.0",
"coveralls": "^2.11.4",
"googleapis": "^2.1.6",
"istanbul": "^0.4.0",
"async": "^1.5.2",
"coveralls": "^2.11.6",
"googleapis": "^2.1.7",
"istanbul": "^0.4.2",
"jshint": "~2.8.0",
"mocha": "^2.2.5",
"proxyquire": "^1.7.3",
Expand Down
24 changes: 24 additions & 0 deletions prediction/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## Prediction API Samples

These samples require an environment variable to be set:

- `GOOGLE_APPLICATION_CREDENTIALS` - Path to a service account file. You can
download one from your Google project's "permissions" page.

## Run a sample

Install dependencies:

npm install

To print available commands:

npm run

Execute a sample:

npm run <sample>

Example:

npm run hostedmodels
3 changes: 3 additions & 0 deletions prediction/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"engines": {
"node": ">=0.10.x"
},
"scripts": {
"hostedmodels": "node hostedmodels.js"
},
Expand Down
Loading