Пример #1
0
        private static async Task Start(Options options)
        {
            _logger.Information("Starting LightHouse with the following properties:");
            _logger.Information($"Service: {options.Service}");
            _logger.Information($"Refresh interval: {options.RefreshInterval}");
            _logger.Information($"Brightness: {options.Brightness}");

            _logger.Information("Start sequence...");

            _signalLightController.Test();

            _logger.Information("Starting to watch build status...");

            var buildProviderSettings = new BuildProviderSettings
            {
                AccessToken = options.Token,
                Collection  = options.Collection,
                Instance    = options.Instance,
                ExcludedBuildDefinitionIds = options.ExcludeBuildDedfinitionIds.ToList(),
                TeamProjects = options.TeamProjects.ToList()
            };

            await _buildsWatcher.Watch(
                buildService : options.Service,
                buildProviderSettings : buildProviderSettings,
                refreshInterval : options.RefreshInterval,
                onRefreshAction : buildsStatus => ProcessBuildsStatus(buildsStatus, options.Brightness, options.EnableFlashing));
        }
Пример #2
0
        private async Task Start()
        {
            _logger.Information("Starting LightHouse with the following properties:");
            _logger.Information($"Service: {LighthouseSettings.Service}");
            _logger.Information($"Refresh interval: {LighthouseSettings.RefreshInterval}");
            _logger.Information($"Brightness: {LighthouseSettings.Brightness}");
            _logger.Information($"Flashing enabled: {LighthouseSettings.EnableFlashing}");

            _logger.Information("Start sequence...");

            _signalLightController.Test();

            _logger.Information("Starting to watch build status...");

            var teamProjects = LighthouseSettings.Projects
                               .Split(',')
                               .Select(p => p.TrimStart().TrimEnd())
                               .ToList();

            var excludedBuildDefinitionIds = LighthouseSettings.ExcludeBuildDefinitionIds != null
                ? LighthouseSettings
                                             .ExcludeBuildDefinitionIds
                                             .Replace(" ", "")
                                             .Split(',')
                                             .Select(p => p.TrimStart().TrimEnd())
                                             .Select(long.Parse)
                                             .ToList()
                : new List <long>();

            var buildProviderSettings = new BuildProviderSettings
            {
                AccessToken = LighthouseSettings.Token,
                Collection  = LighthouseSettings.Collection,
                Instance    = LighthouseSettings.Instance,
                ExcludedBuildDefinitionIds = CreateExcludedBuildDefinitionIds(),
                TeamProjects = CreateTeamProjects()
            };

            await _buildsWatcher.Watch(
                buildService : LighthouseSettings.Service,
                buildProviderSettings : buildProviderSettings,
                refreshInterval : LighthouseSettings.RefreshInterval,
                onRefreshAction : ProcessBuildsStatus);
        }
Пример #3
0
        public async Task <List <Lib.Build> > GetWithStatus(BuildStatus statusFilter, BuildProviderSettings buildProviderSettings)
        {
            try
            {
                var excludedBuildDefinitionIds = buildProviderSettings.ExcludedBuildDefinitionIds ?? new List <long>();
                var urls      = _urlBuilder.Build(buildProviderSettings.Instance, buildProviderSettings.Collection, buildProviderSettings.TeamProjects);
                var responses = new List <BuildDefinitionsResponse>();

                foreach (var vstsUrl in urls)
                {
                    var request = vstsUrl
                                  .WithBasicAuth(buildProviderSettings.AccessToken, string.Empty)
                                  .AppendPathSegment("build")
                                  .AppendPathSegment("builds")
                                  .SetQueryParam("statusFilter", statusFilter.ToString())
                                  .SetQueryParam("maxBuildsPerDefinition", 1)
                                  .SetQueryParam("queryOrder", "finishTimeDescending");

                    _logger.Information($"Getting build definitions from url {request.Url}");

                    var response = await request.GetJsonAsync <BuildDefinitionsResponse>();

                    responses.Add(response);
                }

                return(responses
                       .SelectMany(response => response
                                   .Builds
                                   .Where(bd => !excludedBuildDefinitionIds.Contains(bd.BuildDefinition.Id))
                                   .Select(_mapper.Map <Build, Lib.Build>))
                       .ToList());
            }
            catch (FlurlHttpTimeoutException)
            {
                // FlurlHttpTimeoutException derives from FlurlHttpException; catch here only
                // if you want to handle timeouts as a special case
                _logger.Error("Request timed out.");
            }
            catch (FlurlHttpException ex)
            {
                // ex.Message contains rich details, inclulding the URL, verb, response status,
                // and request and response bodies (if available)
                _logger.Error($"Calling {ex.Call.FlurlRequest.Url} returned the following error:");
                _logger.Error(ex.Message);
                _logger.Error($"Status code: {ex.Call.HttpStatus.ToString()}");
                _logger.Error($"Request Body: {ex.Call.RequestBody}");
                _logger.Error($"Response Body: {await ex.GetResponseStringAsync()}");
            }

            return(new List <Lib.Build>());
        }
        public Task <List <Lib.Build> > GetWithStatus(BuildService buildService, BuildStatus statusFilter, BuildProviderSettings buildProviderSettings)
        {
            switch (buildService)
            {
            case BuildService.Tfs:
                return(_tfsClient.GetWithStatus(statusFilter, buildProviderSettings));

            case BuildService.DevOps:
                return(_devOpsClient.GetWithStatus(statusFilter, buildProviderSettings));

            default:
                throw new Exception($"Build service {buildService} not implemented!");
            }
        }