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));
        }
示例#2
0
        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();
        }
示例#3
0
        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}");
        }
示例#4
0
        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;
        }
示例#6
0
        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);
        }