コード例 #1
0
        public CruiseControlNetBuildStatus(XElement projectElem)
        {
            Name = BuildDefinitionId = projectElem.AttributeValue("name");

            BuildStatusInfo buildStatusInfo;
            if (!_buildStatusInfo.TryGetValue(BuildDefinitionId, out buildStatusInfo))
            {
                buildStatusInfo = new BuildStatusInfo();
                _buildStatusInfo.Add(BuildDefinitionId, buildStatusInfo);
            }

            var lastBuildTimeStr = projectElem.AttributeValueOrDefault("lastBuildTime");
            DateTime dt;
            DateTime? lastBuildTime = null;
            if (DateTime.TryParse(lastBuildTimeStr, out dt))
            {
                lastBuildTime = dt;
            }

            BuildStatusEnum = ToBuildStatusEnum(projectElem.AttributeValueOrDefault("activity"), projectElem.AttributeValueOrDefault("lastBuildStatus"));
            StartedTime = GetStartedTime(buildStatusInfo, BuildStatusEnum, lastBuildTime);
            FinishedTime = GetFinishedTime(buildStatusInfo, BuildStatusEnum, lastBuildTime);
            Comment = null;
            RequestedBy = GetRequestedBy(projectElem);

            var webUrl = projectElem.AttributeValueOrDefault("webUrl");
            string lastBuildTimeAsId = ParseCruiseControlDateToId(lastBuildTimeStr);
            Url = string.Format("{0}/server/local/project/{1}/build/log{2}.xml/ViewBuildReport.aspx", webUrl, Name, lastBuildTimeAsId);
            BuildId = GetBuildIdOrDefault(projectElem, lastBuildTimeAsId);

            buildStatusInfo.LastBuildStatusEnum = BuildStatusEnum;
        }
コード例 #2
0
        public CruiseControlNetBuildStatus(XElement projectElem)
        {
            Name = BuildDefinitionId = projectElem.AttributeValue("name");

            BuildStatusInfo buildStatusInfo;

            if (!_buildStatusInfo.TryGetValue(BuildDefinitionId, out buildStatusInfo))
            {
                buildStatusInfo = new BuildStatusInfo();
                _buildStatusInfo.Add(BuildDefinitionId, buildStatusInfo);
            }

            var      lastBuildTimeStr = projectElem.AttributeValueOrDefault("lastBuildTime");
            DateTime dt;
            DateTime?lastBuildTime = null;

            if (DateTime.TryParse(lastBuildTimeStr, out dt))
            {
                lastBuildTime = dt;
            }

            BuildStatusEnum = ToBuildStatusEnum(projectElem.AttributeValueOrDefault("activity"), projectElem.AttributeValueOrDefault("lastBuildStatus"));
            StartedTime     = GetStartedTime(buildStatusInfo, BuildStatusEnum, lastBuildTime);
            FinishedTime    = GetFinishedTime(buildStatusInfo, BuildStatusEnum, lastBuildTime);
            Comment         = null;
            RequestedBy     = GetRequestedBy(projectElem);

            var    webUrl            = projectElem.AttributeValueOrDefault("webUrl");
            string lastBuildTimeAsId = ParseCruiseControlDateToId(lastBuildTimeStr);

            Url     = string.Format("{0}/server/local/project/{1}/build/log{2}.xml/ViewBuildReport.aspx", webUrl, Name, lastBuildTimeAsId);
            BuildId = GetBuildIdOrDefault(projectElem, lastBuildTimeAsId);

            buildStatusInfo.LastBuildStatusEnum = BuildStatusEnum;
        }
コード例 #3
0
        public CruiseControlNetBuildStatus(XElement projectElem, XElement modifications)
        {
            Name = BuildDefinitionId = projectElem.AttributeValue("name");

            BuildStatusInfo buildStatusInfo;

            if (!_buildStatusInfo.TryGetValue(BuildDefinitionId, out buildStatusInfo))
            {
                buildStatusInfo = new BuildStatusInfo();
                _buildStatusInfo.Add(BuildDefinitionId, buildStatusInfo);
            }

            var      lastBuildTimeStr = projectElem.AttributeValueOrDefault("lastBuildTime");
            DateTime dt;
            DateTime?lastBuildTime = null;

            if (DateTime.TryParse(lastBuildTimeStr, out dt))
            {
                lastBuildTime = dt;
            }

            BuildStatusEnum = ToBuildStatusEnum(projectElem.AttributeValueOrDefault("activity"), projectElem.AttributeValueOrDefault("lastBuildStatus"));
            StartedTime     = GetStartedTime(buildStatusInfo, BuildStatusEnum, lastBuildTime);
            FinishedTime    = GetFinishedTime(buildStatusInfo, BuildStatusEnum, lastBuildTime);
            Comment         = GetComment(projectElem, modifications);
            RequestedBy     = GetRequestedBy(projectElem, modifications);

            var    webUrl            = projectElem.AttributeValueOrDefault("webUrl");
            string lastBuildTimeAsId = ParseCruiseControlDateToId(lastBuildTimeStr);
            string lastBuildNumber   = projectElem.AttributeValueOrDefault("lastBuildLabel");

            Url     = string.Format("{0}/server/local/project/{1}/build/log{2}Lbuild.{3}.xml/ViewBuildReport.aspx", webUrl, Name, lastBuildTimeAsId, lastBuildNumber);
            BuildId = GetBuildIdOrDefault(projectElem, lastBuildTimeAsId);

            if (BuildStatusEnum == SirenOfShame.Lib.Watcher.BuildStatusEnum.InProgress)
            {
                Comment     = "Building...";
                RequestedBy = null;
            }
            else if (BuildStatusEnum == SirenOfShame.Lib.Watcher.BuildStatusEnum.Broken)
            {
                Url     = string.Format("{0}/server/local/project/{1}/build/log{2}.xml/ViewBuildReport.aspx", webUrl, Name, lastBuildTimeAsId);
                BuildId = lastBuildTimeAsId;
            }

            buildStatusInfo.LastBuildStatusEnum = BuildStatusEnum;
        }
コード例 #4
0
        private DateTime?GetFinishedTime(BuildStatusInfo buildStatusInfo, BuildStatusEnum buildStatusEnum, DateTime?lastBuildTime)
        {
            if (buildStatusInfo.LastBuildStatusEnum == null)
            {
                return(lastBuildTime);
            }
            var lastBuildStatusEnum = buildStatusInfo.LastBuildStatusEnum.Value;

            // the build stopped since our last poll time so update the finished time
            if (buildStatusEnum != BuildStatusEnum.InProgress && lastBuildStatusEnum == BuildStatusEnum.InProgress)
            {
                buildStatusInfo.FinishedTime = DateTime.Now;
            }

            if (buildStatusInfo.FinishedTime == null && buildStatusEnum != BuildStatusEnum.InProgress)
            {
                return(lastBuildTime);
            }

            return(buildStatusInfo.FinishedTime);
        }
コード例 #5
0
        private static DateTime?GetStartedTime(BuildStatusInfo buildStatusInfo, BuildStatusEnum buildStatusEnum, DateTime?lastBuildTime)
        {
            bool thisIsTheFirstBuild = buildStatusInfo.LastBuildStatusEnum == null;

            if (thisIsTheFirstBuild)
            {
                return(lastBuildTime);
            }
            var lastBuildStatusEnum = buildStatusInfo.LastBuildStatusEnum.Value;

            // the build started since our last poll time so update the start time
            if (buildStatusEnum == BuildStatusEnum.InProgress && lastBuildStatusEnum != BuildStatusEnum.InProgress)
            {
                buildStatusInfo.StartedTime = DateTime.Now;
            }

            if (buildStatusInfo.StartedTime == null)
            {
                return(lastBuildTime);
            }

            return(buildStatusInfo.StartedTime);
        }
コード例 #6
0
        private static DateTime? GetStartedTime(BuildStatusInfo buildStatusInfo, BuildStatusEnum buildStatusEnum, DateTime? lastBuildTime)
        {
            bool thisIsTheFirstBuild = buildStatusInfo.LastBuildStatusEnum == null;
            if (thisIsTheFirstBuild)
            {
                return lastBuildTime;
            }
            var lastBuildStatusEnum = buildStatusInfo.LastBuildStatusEnum.Value;

            // the build started since our last poll time so update the start time
            if (buildStatusEnum == BuildStatusEnum.InProgress && lastBuildStatusEnum != BuildStatusEnum.InProgress)
            {
                buildStatusInfo.StartedTime = DateTime.Now;
            }

            if (buildStatusInfo.StartedTime == null)
                return lastBuildTime;

            return buildStatusInfo.StartedTime;
        }
コード例 #7
0
        private DateTime? GetFinishedTime(BuildStatusInfo buildStatusInfo, BuildStatusEnum buildStatusEnum, DateTime? lastBuildTime)
        {
            if (buildStatusInfo.LastBuildStatusEnum == null)
            {
                return lastBuildTime;
            }
            var lastBuildStatusEnum = buildStatusInfo.LastBuildStatusEnum.Value;

            // the build stopped since our last poll time so update the finished time
            if (buildStatusEnum != BuildStatusEnum.InProgress && lastBuildStatusEnum == BuildStatusEnum.InProgress)
            {
                buildStatusInfo.FinishedTime = DateTime.Now;
            }

            if (buildStatusInfo.FinishedTime == null && buildStatusEnum != BuildStatusEnum.InProgress)
                return lastBuildTime;

            return buildStatusInfo.FinishedTime;
        }
コード例 #8
0
        public BuildBotBuildStatus(string jsonQuery, string rootUrl)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            jss.RegisterConverters(new JavaScriptConverter[] { new DynamicJsonConverter() });
            dynamic buildStatus = jss.Deserialize<object>(jsonQuery) as dynamic;
            dynamic mostRecentBuild = buildStatus.MinusOne;

            Name = BuildDefinitionId = mostRecentBuild.builderName;

            BuildStatusInfo buildStatusInfo;
            if (!_buildStatusInfo.TryGetValue(BuildDefinitionId, out buildStatusInfo))
            {
                buildStatusInfo = new BuildStatusInfo();
                _buildStatusInfo.Add(BuildDefinitionId, buildStatusInfo);
            }

            //see if mostRecentBuild is in progress, complete or broken
            bool buildInProgress = true;
            if (mostRecentBuild.times[1] != null)
            {
                FinishedTime = FromUnixTime((double)mostRecentBuild.times[1]);
                
                buildInProgress = false;
            }
            else
            {
                FinishedTime = null;
            }

            StartedTime = FromUnixTime((double)mostRecentBuild.times[0]);

            if (buildInProgress)
            {
                BuildStatusEnum = BuildStatusEnum.InProgress;
            }
            else
            {
                try
                {
                    List<object> text = mostRecentBuild.text;
                    if (text.Contains("successful"))
                    {
                        BuildStatusEnum = BuildStatusEnum.Working;
                    }
                    else if (text.Contains("failed"))
                    {
                        BuildStatusEnum = BuildStatusEnum.Broken;
                    }
                    else
                    {
                        BuildStatusEnum = BuildStatusEnum.Unknown;
                    }
                }
                catch( Exception )
                {
                    BuildStatusEnum = BuildStatusEnum.Unknown;
                }
            }

            try
            {
                List<object> changes = mostRecentBuild.sourceStamp.changes;
                if( changes.Count > 0 && changes[0].GetType() == typeof(Dictionary<String,object>))
                {
                    var change = changes[0] as Dictionary<string, object>;
                    if (change != null) Comment = change["comments"].ToString();
                }
            }
            catch (Exception ex)
            {
                _log.Error("Error retrieving build bot comments", ex);
            }
            if (Comment == null)
            {
                Comment = mostRecentBuild.reason;
            }

            var requestedby = GetProperty("blamelist", mostRecentBuild);
            if (requestedby != null && requestedby.Count > 1)
            {
                ArrayList fools = requestedby[1];
                var sb = new StringBuilder();
                for( int i = 0; i < fools.Count; ++i )
                {
                    if( i != 0 )
                    {
                        sb.Append(", ");
                    }
                    sb.Append(fools[i]);
                }
                RequestedBy = sb.ToString();
            }
            else
            {
                requestedby = GetProperty("owner", mostRecentBuild);
                if (requestedby != null && requestedby.Count > 1)
                {
                    RequestedBy = requestedby[1];
                }
                else
                {
                    //no idea!
                    RequestedBy = null;
                }
            }

            var uriString = rootUrl + "/builders/" + mostRecentBuild.builderName + "/builds/" + mostRecentBuild.number as string;
            var webUrl = new Uri(uriString);
            Url = webUrl.ToString();
            BuildId = mostRecentBuild.number.ToString();

            buildStatusInfo.LastBuildStatusEnum = BuildStatusEnum;
        }
コード例 #9
0
        public BuildBotBuildStatus(string jsonQuery, string rootUrl)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();

            jss.RegisterConverters(new JavaScriptConverter[] { new DynamicJsonConverter() });
            dynamic buildStatus     = jss.Deserialize <object>(jsonQuery) as dynamic;
            dynamic mostRecentBuild = buildStatus.MinusOne;

            Name = BuildDefinitionId = mostRecentBuild.builderName;

            BuildStatusInfo buildStatusInfo;

            if (!_buildStatusInfo.TryGetValue(BuildDefinitionId, out buildStatusInfo))
            {
                buildStatusInfo = new BuildStatusInfo();
                _buildStatusInfo.Add(BuildDefinitionId, buildStatusInfo);
            }

            //see if mostRecentBuild is in progress, complete or broken
            bool buildInProgress = true;

            if (mostRecentBuild.times[1] != null)
            {
                FinishedTime = FromUnixTime((double)mostRecentBuild.times[1]);

                buildInProgress = false;
            }
            else
            {
                FinishedTime = null;
            }

            StartedTime = FromUnixTime((double)mostRecentBuild.times[0]);

            if (buildInProgress)
            {
                BuildStatusEnum = BuildStatusEnum.InProgress;
            }
            else
            {
                try
                {
                    List <object> text = mostRecentBuild.text;
                    if (text.Contains("successful"))
                    {
                        BuildStatusEnum = BuildStatusEnum.Working;
                    }
                    else if (text.Contains("failed"))
                    {
                        BuildStatusEnum = BuildStatusEnum.Broken;
                    }
                    else
                    {
                        BuildStatusEnum = BuildStatusEnum.Unknown;
                    }
                }
                catch (Exception)
                {
                    BuildStatusEnum = BuildStatusEnum.Unknown;
                }
            }

            try
            {
                List <object> changes = mostRecentBuild.sourceStamp.changes;
                if (changes.Count > 0 && changes[0].GetType() == typeof(Dictionary <String, object>))
                {
                    var change = changes[0] as Dictionary <string, object>;
                    if (change != null)
                    {
                        Comment = change["comments"].ToString();
                    }
                }
            }
            catch (Exception ex)
            {
                _log.Error("Error retrieving build bot comments", ex);
            }
            if (Comment == null)
            {
                Comment = mostRecentBuild.reason;
            }

            var requestedby = GetProperty("blamelist", mostRecentBuild);

            if (requestedby != null && requestedby.Count > 1)
            {
                ArrayList fools = requestedby[1];
                var       sb    = new StringBuilder();
                for (int i = 0; i < fools.Count; ++i)
                {
                    if (i != 0)
                    {
                        sb.Append(", ");
                    }
                    sb.Append(fools[i]);
                }
                RequestedBy = sb.ToString();
            }
            else
            {
                requestedby = GetProperty("owner", mostRecentBuild);
                if (requestedby != null && requestedby.Count > 1)
                {
                    RequestedBy = requestedby[1];
                }
                else
                {
                    //no idea!
                    RequestedBy = null;
                }
            }

            var uriString = rootUrl + "/builders/" + mostRecentBuild.builderName + "/builds/" + mostRecentBuild.number as string;
            var webUrl    = new Uri(uriString);

            Url     = webUrl.ToString();
            BuildId = mostRecentBuild.number.ToString();

            buildStatusInfo.LastBuildStatusEnum = BuildStatusEnum;
        }