diff --git a/monitoring/cloud-client/README.md b/monitoring/cloud-client/README.md
new file mode 100644
index 00000000000..930a7a5eb57
--- /dev/null
+++ b/monitoring/cloud-client/README.md
@@ -0,0 +1,32 @@
+# Getting Started with Google Stackdriver Monitoring API and the Google Cloud Client libraries
+
+[Google Stackdriver Monitoring API][monitoring] collects metrics, events, and
+metadata from Google Cloud Platform, Amazon Web Services (AWS), hosted uptime
+probes, application instrumentation, and a variety of common application
+components including Cassandra, Nginx, Apache Web Server, Elasticsearch and many
+others.
+
+These sample Java applications demonstrate how to access the Stackdriver
+Monitoring API using the [Google Cloud Client Library for Java][google-cloud-java].
+
+[monitoring]: https://cloud.google.com/monitoring/docs/
+[google-cloud-java]: https://github.com/GoogleCloudPlatform/google-cloud-java
+
+## Quickstart
+
+Install [Maven](http://maven.apache.org/).
+
+Build your project with:
+
+ mvn clean package -DskipTests
+
+You can then run a given `ClassName` via:
+
+ mvn exec:java -Dexec.mainClass=com.example.monitoring.ClassName \
+ -DpropertyName=propertyValue \
+ -Dexec.args="arg1 'arg 2' arg3"
+
+### Write a time series to a metric (using the quickstart sample)
+
+ mvn exec:java -Dexec.mainClass=com.example.monitoring.QuickstartSample \
+ -DprojectId=YOUR_PROJECT_ID
diff --git a/monitoring/cloud-client/pom.xml b/monitoring/cloud-client/pom.xml
new file mode 100644
index 00000000000..4b726298eae
--- /dev/null
+++ b/monitoring/cloud-client/pom.xml
@@ -0,0 +1,57 @@
+
+
+ 4.0.0
+ com.example.monitoring
+ monitoring-google-cloud-samples
+ jar
+
+
+
+ doc-samples
+ com.google.cloud
+ 1.0.0
+ ../..
+
+
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+
+ com.google.cloud
+ google-cloud-monitoring
+ 0.8.1-alpha
+
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ com.google.truth
+ truth
+ 0.31
+ test
+
+
+
diff --git a/monitoring/cloud-client/src/main/java/com/example/monitoring/QuickstartSample.java b/monitoring/cloud-client/src/main/java/com/example/monitoring/QuickstartSample.java
new file mode 100644
index 00000000000..e90b08994be
--- /dev/null
+++ b/monitoring/cloud-client/src/main/java/com/example/monitoring/QuickstartSample.java
@@ -0,0 +1,107 @@
+/*
+ Copyright 2017, 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.
+*/
+
+package com.example.monitoring;
+
+// [START monitoring_quickstart]
+import com.google.api.Metric;
+import com.google.api.MonitoredResource;
+
+// Imports the Google Cloud client library
+import com.google.cloud.monitoring.spi.v3.MetricServiceClient;
+
+import com.google.monitoring.v3.CreateTimeSeriesRequest;
+import com.google.monitoring.v3.Point;
+import com.google.monitoring.v3.ProjectName;
+import com.google.monitoring.v3.TimeInterval;
+import com.google.monitoring.v3.TimeSeries;
+import com.google.monitoring.v3.TypedValue;
+import com.google.protobuf.util.Timestamps;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class QuickstartSample {
+ public static void main(String... args) throws Exception {
+ // Your Google Cloud Platform project ID
+ String projectId = System.getProperty("projectId");
+
+ if (projectId == null) {
+ System.err.println("Usage: QuickstartSample -DprojectId=YOUR_PROJECT_ID");
+ return;
+ }
+
+ // Instantiates a client
+ MetricServiceClient metricServiceClient = MetricServiceClient.create();
+
+ // Prepares an individual data point
+ TimeInterval interval = TimeInterval.newBuilder()
+ .setEndTime(Timestamps.fromMillis(System.currentTimeMillis()))
+ .build();
+ TypedValue value = TypedValue.newBuilder()
+ .setDoubleValue(123.45)
+ .build();
+ Point point = Point.newBuilder()
+ .setInterval(interval)
+ .setValue(value)
+ .build();
+
+ List pointList = new ArrayList<>();
+ pointList.add(point);
+
+ ProjectName name = ProjectName.create(projectId);
+
+ // Prepares the metric descriptor
+ Map metricLabels = new HashMap();
+ metricLabels.put("store_id", "Pittsburg");
+ Metric metric = Metric.newBuilder()
+ .setType("custom.googleapis.com/stores/daily_sales")
+ .putAllLabels(metricLabels)
+ .build();
+
+ // Prepares the monitored resource descriptor
+ Map resourceLabels = new HashMap();
+ resourceLabels.put("project_id", projectId);
+ MonitoredResource resource = MonitoredResource.newBuilder()
+ .setType("global")
+ .putAllLabels(resourceLabels)
+ .build();
+
+ // Prepares the time series request
+ TimeSeries timeSeries = TimeSeries.newBuilder()
+ .setMetric(metric)
+ .setResource(resource)
+ .addAllPoints(pointList)
+ .build();
+ List timeSeriesList = new ArrayList<>();
+ timeSeriesList.add(timeSeries);
+
+ CreateTimeSeriesRequest request = CreateTimeSeriesRequest.newBuilder()
+ .setNameWithProjectName(name)
+ .addAllTimeSeries(timeSeriesList)
+ .build();
+
+ // Writes time series data
+ metricServiceClient.createTimeSeries(request);
+
+ System.out.printf("Done writing time series data.%n");
+
+ metricServiceClient.close();
+ }
+}
+// [END monitoring_quickstart]
diff --git a/monitoring/cloud-client/src/test/java/com/example/monitoring/QuickstartSampleIT.java b/monitoring/cloud-client/src/test/java/com/example/monitoring/QuickstartSampleIT.java
new file mode 100644
index 00000000000..dbc8000c408
--- /dev/null
+++ b/monitoring/cloud-client/src/test/java/com/example/monitoring/QuickstartSampleIT.java
@@ -0,0 +1,72 @@
+/*
+ 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.
+*/
+
+package com.example.monitoring;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+/**
+ * Tests for quickstart sample.
+ */
+@RunWith(JUnit4.class)
+@SuppressWarnings("checkstyle:abbreviationaswordinname")
+public class QuickstartSampleIT {
+ private ByteArrayOutputStream bout;
+ private PrintStream out;
+ private static final String LEGACY_PROJECT_ENV_NAME = "GCLOUD_PROJECT";
+ private static final String PROJECT_ENV_NAME = "GOOGLE_CLOUD_PROJECT";
+
+ private static String getProjectId() {
+ String projectId = System.getProperty(PROJECT_ENV_NAME, System.getenv(PROJECT_ENV_NAME));
+ if (projectId == null) {
+ projectId = System.getProperty(LEGACY_PROJECT_ENV_NAME,
+ System.getenv(LEGACY_PROJECT_ENV_NAME));
+ }
+ return projectId;
+ }
+
+ @Before
+ public void setUp() {
+ bout = new ByteArrayOutputStream();
+ out = new PrintStream(bout);
+ System.setOut(out);
+ }
+
+ @After
+ public void tearDown() {
+ System.setOut(null);
+ }
+
+ @Test
+ public void testQuickstart() throws Exception {
+ // Act
+ System.setProperty("projectId", QuickstartSampleIT.getProjectId());
+ QuickstartSample.main();
+
+ // Assert
+ String got = bout.toString();
+ assertThat(got).contains("Done writing time series data.");
+ }
+}
diff --git a/pom.xml b/pom.xml
index 892508db62e..6adb93d79e7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,6 +80,7 @@
language/cloud-client
logging
logging/cloud-client
+ monitoring/cloud-client
monitoring/v2
monitoring/v3
pubsub/cloud-client