private void Export() { var viewDataList = new List <IViewData>(); foreach (var view in viewManager.AllExportedViews) { if (RegisterView(view)) { var data = viewManager.GetView(view.Name); viewDataList.Add(data); } } // Add time series from all the views that need exporting var timeSeriesList = new List <TimeSeries>(); foreach (var viewData in viewDataList) { var metricDescriptor = metricDescriptors[viewData.View]; var timeSeries = MetricsConversions.CreateTimeSeriesList(viewData, monitoredResource, metricDescriptor, domain); timeSeriesList.AddRange(timeSeries); } // Perform the operation in batches of MAX_BATCH_EXPORT_SIZE foreach (var batchedTimeSeries in timeSeriesList.Partition(MAX_BATCH_EXPORT_SIZE)) { var request = new CreateTimeSeriesRequest(); request.ProjectName = project; request.TimeSeries.AddRange(batchedTimeSeries); try { metricServiceClient.CreateTimeSeries(request); } catch (RpcException e) { ExporterStackdriverEventSource.Log.UnknownProblemWhileCreatingStackdriverTimeSeriesError(e); } } }
private bool RegisterView(IView view) { IView existing = null; if (this.registeredViews.TryGetValue(view.Name, out existing)) { // Ignore views that are already registered. return(existing.Equals(view)); } this.registeredViews.Add(view.Name, view); var metricDescriptorTypeName = GenerateMetricDescriptorTypeName(view.Name, this.domain); // TODO - zeltser: don't need to create MetricDescriptor for RpcViewConstants once we defined // canonical metrics. Registration is required only for custom view definitions. Canonical // views should be pre-registered. var metricDescriptor = MetricsConversions.CreateMetricDescriptor( metricDescriptorTypeName, view, this.project, this.domain, this.displayNamePrefix); if (metricDescriptor == null) { // Don't register interval views in this version. return(false); } // Cache metric descriptor and ensure it exists in Stackdriver if (!this.metricDescriptors.ContainsKey(view)) { this.metricDescriptors.Add(view, metricDescriptor); } return(this.EnsureMetricDescriptorExists(metricDescriptor)); }