4141import com .google .monitoring .v3 .TimeSeries ;
4242import com .google .monitoring .v3 .TypedValue ;
4343import com .google .protobuf .util .Timestamps ;
44-
4544import java .io .IOException ;
4645import java .io .PrintStream ;
4746import java .util .ArrayList ;
@@ -55,27 +54,26 @@ public class BigQueryRunner {
5554 "metric.type = starts_with(\" custom.googleapis.com/\" )" ;
5655 private static BigQueryRunner instance ;
5756
58- private static final MetricDescriptor QUERY_DURATION_METRIC = MetricDescriptor
59- .newBuilder ()
60- .setName ("custom.googleapis.com/queryDuration" )
61- .setType ("custom.googleapis.com/queryDuration" )
62- .setDisplayName ("queryDuration" )
63- .setDescription ("Time it took a query to run." )
64- .setMetricKind (MetricDescriptor .MetricKind .GAUGE )
65- .setValueType (MetricDescriptor .ValueType .INT64 )
66- .build ();
67- private static final MetricDescriptor ROWS_RETURNED_METRIC = MetricDescriptor
68- .newBuilder ()
69- .setName ("custom.googleapis.com/rowsReturned" )
70- .setType ("custom.googleapis.com/rowsReturned" )
71- .setDisplayName ("rowsReturned" )
72- .setDescription ("Total rows returned by the query result." )
73- .setMetricKind (MetricDescriptor .MetricKind .GAUGE )
74- .setValueType (MetricDescriptor .ValueType .INT64 )
75- .build ();
76- private static final Set <MetricDescriptor > REQUIRED_METRICS = ImmutableSet .of (
77- QUERY_DURATION_METRIC , ROWS_RETURNED_METRIC
78- );
57+ private static final MetricDescriptor QUERY_DURATION_METRIC =
58+ MetricDescriptor .newBuilder ()
59+ .setName ("custom.googleapis.com/queryDuration" )
60+ .setType ("custom.googleapis.com/queryDuration" )
61+ .setDisplayName ("queryDuration" )
62+ .setDescription ("Time it took a query to run." )
63+ .setMetricKind (MetricDescriptor .MetricKind .GAUGE )
64+ .setValueType (MetricDescriptor .ValueType .INT64 )
65+ .build ();
66+ private static final MetricDescriptor ROWS_RETURNED_METRIC =
67+ MetricDescriptor .newBuilder ()
68+ .setName ("custom.googleapis.com/rowsReturned" )
69+ .setType ("custom.googleapis.com/rowsReturned" )
70+ .setDisplayName ("rowsReturned" )
71+ .setDescription ("Total rows returned by the query result." )
72+ .setMetricKind (MetricDescriptor .MetricKind .GAUGE )
73+ .setValueType (MetricDescriptor .ValueType .INT64 )
74+ .build ();
75+ private static final Set <MetricDescriptor > REQUIRED_METRICS =
76+ ImmutableSet .of (QUERY_DURATION_METRIC , ROWS_RETURNED_METRIC );
7977
8078 private static TableResult mostRecentRunResult ;
8179 private static Set <String > existingMetrics = Sets .newHashSet ();
@@ -94,7 +92,8 @@ public static synchronized BigQueryRunner getInstance() throws IOException {
9492 }
9593
9694 private BigQueryRunner () throws IOException {
97- this (MetricServiceClient .create (),
95+ this (
96+ MetricServiceClient .create (),
9897 BigQueryOptions .getDefaultInstance ().getService (),
9998 System .out );
10099 }
@@ -113,12 +112,12 @@ public static TableResult getMostRecentRunResult() {
113112 public void runQuery () throws InterruptedException {
114113 QueryJobConfiguration queryConfig =
115114 QueryJobConfiguration .newBuilder (
116- "SELECT "
117- + "CONCAT('https://stackoverflow.com/questions/', CAST(id as STRING)) as url, "
118- + "view_count "
119- + "FROM `bigquery-public-data.stackoverflow.posts_questions` "
120- + "WHERE tags like '%google-bigquery%' "
121- + "ORDER BY favorite_count DESC LIMIT 10" )
115+ "SELECT "
116+ + "CONCAT('https://stackoverflow.com/questions/', CAST(id as STRING)) as url, "
117+ + "view_count "
118+ + "FROM `bigquery-public-data.stackoverflow.posts_questions` "
119+ + "WHERE tags like '%google-bigquery%' "
120+ + "ORDER BY favorite_count DESC LIMIT 10" )
122121 // Use standard SQL syntax for queries.
123122 // See: https://cloud.google.com/bigquery/sql-reference/
124123 .setUseLegacySql (false )
@@ -155,10 +154,11 @@ public void runQuery() throws InterruptedException {
155154 timeSeriesList .add (prepareMetric (ROWS_RETURNED_METRIC , result .getTotalRows ()));
156155
157156 // Prepares the time series request
158- CreateTimeSeriesRequest request = CreateTimeSeriesRequest .newBuilder ()
159- .setName (projectName )
160- .addAllTimeSeries (timeSeriesList )
161- .build ();
157+ CreateTimeSeriesRequest request =
158+ CreateTimeSeriesRequest .newBuilder ()
159+ .setName (projectName )
160+ .addAllTimeSeries (timeSeriesList )
161+ .build ();
162162
163163 createMetricsIfNeeded ();
164164 client .createTimeSeries (request );
@@ -169,56 +169,50 @@ public void runQuery() throws InterruptedException {
169169
170170 // Returns a metric time series with a single int64 data point.
171171 private TimeSeries prepareMetric (MetricDescriptor requiredMetric , long metricValue ) {
172- TimeInterval interval = TimeInterval .newBuilder ()
173- .setEndTime (Timestamps .fromMillis (System .currentTimeMillis ()))
174- .build ();
175- TypedValue value = TypedValue
176- .newBuilder ()
177- .setInt64Value (metricValue )
178- .build ();
179-
180- Point point = Point .newBuilder ()
181- .setInterval (interval )
182- .setValue (value )
183- .build ();
172+ TimeInterval interval =
173+ TimeInterval .newBuilder ()
174+ .setEndTime (Timestamps .fromMillis (System .currentTimeMillis ()))
175+ .build ();
176+ TypedValue value = TypedValue .newBuilder ().setInt64Value (metricValue ).build ();
177+
178+ Point point = Point .newBuilder ().setInterval (interval ).setValue (value ).build ();
184179
185180 List <Point > pointList = Lists .newArrayList ();
186181 pointList .add (point );
187182
188- Metric metric = Metric .newBuilder ()
189- .setType (requiredMetric .getName ())
190- .build ();
183+ Metric metric = Metric .newBuilder ().setType (requiredMetric .getName ()).build ();
191184
192- return TimeSeries .newBuilder ()
193- .setMetric (metric )
194- .addAllPoints (pointList )
195- .build ();
185+ return TimeSeries .newBuilder ().setMetric (metric ).addAllPoints (pointList ).build ();
196186 }
197187
198188 public List <TimeSeriesSummary > getTimeSeriesValues () {
199189 List <TimeSeriesSummary > summaries = Lists .newArrayList ();
200190 createMetricsIfNeeded ();
201191 for (MetricDescriptor metric : REQUIRED_METRICS ) {
202- ListTimeSeriesRequest listTimeSeriesRequest = ListTimeSeriesRequest
203- .newBuilder ()
204- .setName (projectName )
205- .setFilter (String .format ("metric.type = \" %s\" " , metric .getType ()))
206- .setInterval (TimeInterval .newBuilder ()
207- .setStartTime (Timestamps .subtract (Timestamps .fromMillis (System .currentTimeMillis ()),
208- com .google .protobuf .Duration .newBuilder ()
209- .setSeconds (60L * 60L * 24L * 30L ) // 30 days ago
210- .build ()))
211- .setEndTime (Timestamps .fromMillis (System .currentTimeMillis ()))
212- .build ())
213- .build ();
192+ ListTimeSeriesRequest listTimeSeriesRequest =
193+ ListTimeSeriesRequest .newBuilder ()
194+ .setName (projectName )
195+ .setFilter (String .format ("metric.type = \" %s\" " , metric .getType ()))
196+ .setInterval (
197+ TimeInterval .newBuilder ()
198+ .setStartTime (
199+ Timestamps .subtract (
200+ Timestamps .fromMillis (System .currentTimeMillis ()),
201+ com .google .protobuf .Duration .newBuilder ()
202+ .setSeconds (60L * 60L * 24L * 30L ) // 30 days ago
203+ .build ()))
204+ .setEndTime (Timestamps .fromMillis (System .currentTimeMillis ()))
205+ .build ())
206+ .build ();
214207 try {
215- ListTimeSeriesPagedResponse listTimeSeriesResponse = client . listTimeSeries (
216- listTimeSeriesRequest );
208+ ListTimeSeriesPagedResponse listTimeSeriesResponse =
209+ client . listTimeSeries ( listTimeSeriesRequest );
217210 ArrayList <TimeSeries > timeSeries = Lists .newArrayList (listTimeSeriesResponse .iterateAll ());
218- summaries .addAll (timeSeries
219- .stream ()
220- .map (TimeSeriesSummary ::fromTimeSeries )
221- .collect (Collectors .toList ()));
211+ summaries .addAll (
212+ timeSeries
213+ .stream ()
214+ .map (TimeSeriesSummary ::fromTimeSeries )
215+ .collect (Collectors .toList ()));
222216 } catch (RuntimeException ex ) {
223217 os .println ("MetricDescriptors not yet synced. Please try again in a moment." );
224218 }
@@ -228,35 +222,37 @@ public List<TimeSeriesSummary> getTimeSeriesValues() {
228222
229223 private void createMetricsIfNeeded () {
230224 // If all required metrics already exist, no need to make service calls.
231- if (REQUIRED_METRICS .stream ()
225+ if (REQUIRED_METRICS
226+ .stream ()
232227 .map (MetricDescriptor ::getDisplayName )
233228 .allMatch (existingMetrics ::contains )) {
234229 return ;
235230 }
236- ListMetricDescriptorsRequest listMetricsRequest = ListMetricDescriptorsRequest
237- .newBuilder ()
238- .setName (projectName )
239- .setFilter (CUSTOM_METRIC_FILTER )
240- .build ();
241- ListMetricDescriptorsPagedResponse listMetricsResponse = client . listMetricDescriptors (
242- listMetricsRequest );
231+ ListMetricDescriptorsRequest listMetricsRequest =
232+ ListMetricDescriptorsRequest .newBuilder ()
233+ .setName (projectName )
234+ .setFilter (CUSTOM_METRIC_FILTER )
235+ .build ();
236+ ListMetricDescriptorsPagedResponse listMetricsResponse =
237+ client . listMetricDescriptors ( listMetricsRequest );
243238
244239 for (MetricDescriptor existingMetric : listMetricsResponse .iterateAll ()) {
245240 existingMetrics .add (existingMetric .getDisplayName ());
246241 }
247242
248- REQUIRED_METRICS .stream ()
243+ REQUIRED_METRICS
244+ .stream ()
249245 .filter (metric -> !existingMetrics .contains (metric .getDisplayName ()))
250246 .forEach (this ::createMetric );
251247 }
252248
253249 private void createMetric (MetricDescriptor newMetric ) {
254- CreateMetricDescriptorRequest request = CreateMetricDescriptorRequest .newBuilder ()
255- .setName (projectName )
256- .setMetricDescriptor (newMetric )
257- .build ();
250+ CreateMetricDescriptorRequest request =
251+ CreateMetricDescriptorRequest .newBuilder ()
252+ .setName (projectName )
253+ .setMetricDescriptor (newMetric )
254+ .build ();
258255
259256 client .createMetricDescriptor (request );
260257 }
261-
262258}
0 commit comments