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) { MetricDescriptor metricDescriptor = metricDescriptors[viewData.View]; List <TimeSeries> timeSeries = MetricsConversions.CreateTimeSeriesList(viewData, monitoredResource, metricDescriptor, domain); timeSeriesList.AddRange(timeSeries); } // Perform the operation in batches of MAX_BATCH_EXPORT_SIZE foreach (IEnumerable <TimeSeries> 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 (registeredViews.TryGetValue(view.Name, out existing)) { // Ignore views that are already registered. return(existing.Equals(view)); } registeredViews.Add(view.Name, view); string metricDescriptorTypeName = GenerateMetricDescriptorTypeName(view.Name, 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. MetricDescriptor metricDescriptor = MetricsConversions.CreateMetricDescriptor( metricDescriptorTypeName, view, project, domain, displayNamePrefix); if (metricDescriptor == null) { // Don't register interval views in this version. return(false); } // Cache metric descriptor and ensure it exists in Stackdriver if (!metricDescriptors.ContainsKey(view)) { metricDescriptors.Add(view, metricDescriptor); } return(EnsureMetricDescriptorExists(metricDescriptor)); }