diff --git a/error_reporting/README.rst b/error_reporting/api/README.rst similarity index 100% rename from error_reporting/README.rst rename to error_reporting/api/README.rst diff --git a/error_reporting/README.rst.in b/error_reporting/api/README.rst.in similarity index 100% rename from error_reporting/README.rst.in rename to error_reporting/api/README.rst.in diff --git a/error_reporting/report_exception.py b/error_reporting/api/report_exception.py similarity index 100% rename from error_reporting/report_exception.py rename to error_reporting/api/report_exception.py diff --git a/error_reporting/report_exception_test.py b/error_reporting/api/report_exception_test.py similarity index 100% rename from error_reporting/report_exception_test.py rename to error_reporting/api/report_exception_test.py diff --git a/error_reporting/requirements.txt b/error_reporting/api/requirements.txt similarity index 100% rename from error_reporting/requirements.txt rename to error_reporting/api/requirements.txt diff --git a/error_reporting/fluentd_on_gce/README.md b/error_reporting/fluentd_on_gce/README.md new file mode 100644 index 000000000000..4c9a24c60dc4 --- /dev/null +++ b/error_reporting/fluentd_on_gce/README.md @@ -0,0 +1,30 @@ +# Google Error Reorting Samples Samples + +This section contains samples for [Google Cloud Error Reporting](https://cloud.google.com/error-reporting). + +A startup script has been provided to demonstrated how to properly provision a GCE +instance with fluentd configured. Note the intallation of fluentd, the addition of the config file, + and the restarting of the fluetnd service. You can start an instance using +it like this: + + gcloud compute instances create example-instance --metadata-from-file startup-script=startup_script.sh + +or simply use it as reference when creating your own instance. + +After fluentd is configured, main.py could be used to simulate an error: + + gcloud compute copy-files main.py example-instance:~/main.py + +Then, + + gcloud compute ssh example-instance + python ~/main.py + +And you will see the message in the Errors Console. + + +These samples are used on the following documentation page: + +> https://cloud.google.com/error-reporting/docs/setting-up-on-compute-engine + + diff --git a/error_reporting/fluentd_on_gce/main.py b/error_reporting/fluentd_on_gce/main.py new file mode 100644 index 000000000000..45208c913ac5 --- /dev/null +++ b/error_reporting/fluentd_on_gce/main.py @@ -0,0 +1,42 @@ +# Copyright 2016 Google Inc. All rights reserved. +# +# 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. + +# [START error_reporting] +import traceback + +import fluent.event +import fluent.sender + + +def simulate_error(): + fluent.sender.setup('myapp', host='localhost', port=24224) + + def report(ex): + data = {} + data['message'] = '{0}'.format(ex) + data['serviceContext'] = {'service': 'myapp'} + # ... add more metadata + fluent.event.Event('errors', data) + + # report exception data using: + try: + # simulate calling a method that's not defined + raise NameError + except Exception: + report(traceback.format_exc()) +# [END error_reporting] + + +if __name__ == '__main__': + simulate_error() diff --git a/error_reporting/fluentd_on_gce/main_test.py b/error_reporting/fluentd_on_gce/main_test.py new file mode 100644 index 000000000000..11a24d035438 --- /dev/null +++ b/error_reporting/fluentd_on_gce/main_test.py @@ -0,0 +1,23 @@ +# Copyright 2016 Google Inc. All rights reserved. +# +# 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. + +import mock + +import main + + +@mock.patch("fluent.event") +def test_error_sends(event_mock): + main.simulate_error() + event_mock.Event.assert_called_once_with(mock.ANY, mock.ANY) diff --git a/error_reporting/fluentd_on_gce/requirements.txt b/error_reporting/fluentd_on_gce/requirements.txt new file mode 100644 index 000000000000..0119e25c6df4 --- /dev/null +++ b/error_reporting/fluentd_on_gce/requirements.txt @@ -0,0 +1 @@ +fluent-logger==0.4.4 diff --git a/error_reporting/fluentd_on_gce/startup_script.sh b/error_reporting/fluentd_on_gce/startup_script.sh new file mode 100644 index 000000000000..f2ef895dcfdc --- /dev/null +++ b/error_reporting/fluentd_on_gce/startup_script.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# Copyright 2016 Google Inc. All rights reserved. +# +# 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. + +set -v + +curl -sSO "https://dl.google.com/cloudagents/install-logging-agent.sh" +chmod +x install-logging-agent.sh +./install-logging-agent.sh +mkdir -p /etc/google-fluentd/config.d/ +cat < /etc/google-fluentd/config.d/forward.conf + + type forward + port 24224 + +EOF +service google-fluentd restart + +apt-get update +apt-get install -yq \ + git build-essential supervisor python python-dev python-pip libffi-dev \ + libssl-dev +pip install fluent-logger +