public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems) { AmazonXRayConfig config = new AmazonXRayConfig(); config.RegionEndpoint = region; ConfigureClient(config); AmazonXRayClient client = new AmazonXRayClient(creds, config); GetGroupsResponse resp = new GetGroupsResponse(); do { GetGroupsRequest req = new GetGroupsRequest { NextToken = resp.NextToken }; resp = client.GetGroups(req); CheckError(resp.HttpStatusCode, "200"); foreach (var obj in resp.Groups) { AddObject(obj); } }while (!string.IsNullOrEmpty(resp.NextToken)); }
protected static void ClassInit() { var config = new AmazonXRayConfig(); config.ServiceURL = "https://xray.us-east-1.amazonaws.com "; config.AuthenticationRegion = "us-east-1"; XrayClient = new AmazonXRayClient(config); Recorder = new AWSXRayRecorder(); }
private void RefreshEndPoint() { var serviceUrlCandidate = $"http://{_daemonConfig.TCPEndpoint.Address}:{_daemonConfig.TCPEndpoint.Port}"; if (serviceUrlCandidate.Equals(_xrayClient.Config.ServiceURL)) { return; // endpoint do not need refreshing } _config.ServiceURL = serviceUrlCandidate; _xrayClient = new AmazonXRayClient(_credentials, _config); _logger.DebugFormat($"ServiceConnector Endpoint refreshed to: {_xrayClient.Config.ServiceURL}"); }
protected IAmazonXRay CreateClient(AWSCredentials credentials, RegionEndpoint region) { var config = new AmazonXRayConfig { RegionEndpoint = region }; Amazon.PowerShell.Utils.Common.PopulateConfig(this, config); this.CustomizeClientConfig(config); var client = new AmazonXRayClient(credentials, config); client.BeforeRequestEvent += RequestEventHandler; client.AfterResponseEvent += ResponseEventHandler; return(client); }
public ServiceConnector(DaemonConfig daemonConfig, AmazonXRayClient xrayClient) { ClientID = ThreadSafeRandom.GenerateHexNumber(24); if (daemonConfig == null) { daemonConfig = DaemonConfig.GetEndPoint(); } if (xrayClient == null) { xrayClient = CreateXRayClient(daemonConfig); } _xrayClient = xrayClient; }
public async Task <State> CollectMetrics(State state, ILambdaContext context) { state.EndTimeInEpoch = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); var client = new AmazonXRayClient(RegionEndpoint.APSoutheast2); var getTraceSummariesRequest = new GetTraceSummariesRequest { StartTime = DateTimeOffset.FromUnixTimeSeconds(state.StartTimeInEpoch).UtcDateTime, EndTime = DateTimeOffset.FromUnixTimeSeconds(state.EndTimeInEpoch).UtcDateTime, TimeRangeType = TimeRangeType.Event }; var getTraceSummariesResponse = await client.GetTraceSummariesAsync(getTraceSummariesRequest); var traceIds = getTraceSummariesResponse.TraceSummaries.Select(x => x.Id); var traces = new List <Trace>(); foreach (var batchIds in Batch(traceIds, XRayBatchSize)) { var request = new BatchGetTracesRequest { TraceIds = batchIds.ToList(), }; var response = await client.BatchGetTracesAsync(request); traces.AddRange(response.Traces); } var metrics = new List <LambdaMetric>(); foreach (var trace in traces) { foreach (var segment in trace.Segments) { var document = JsonConvert.DeserializeObject <XRayLambdaTrace.Document>(segment.Document); Console.WriteLine(segment.Document); if (document.name == state.FunctionName) { if (document.origin == "AWS::Lambda::Function") { metrics.Add(CreateLambdaMetric(document, document.trace_id, document.name, document.origin, "Total")); foreach (var subSegment in document.subsegments) { metrics.Add(CreateLambdaMetric(subSegment, document.trace_id, document.name, document.origin, null)); } } else if (document.origin == "AWS::Lambda") { metrics.Add(CreateLambdaMetric(document, document.trace_id, document.name, document.origin, "Total")); } } } } var contentBody = string.Empty; using (var writer = new StringWriter()) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture, true)) { csv.WriteRecords(metrics); csv.Flush(); contentBody = writer.ToString(); } var bucketName = System.Environment.GetEnvironmentVariable("MetricS3BucketName"); var now = DateTime.Now; var putObjectRequest = new PutObjectRequest { BucketName = bucketName, Key = $"{now:yyyy-MM-dd}/{state.FunctionName}-{now:HHmmss}.csv", ContentType = "text/csv", ContentBody = contentBody }; var s3Client = new AmazonS3Client(RegionEndpoint.APSoutheast2); await s3Client.PutObjectAsync(putObjectRequest); return(state); }