Example #1
0
 public static List <StudentDemographicInfo> Get(Criteria criteria)
 {
     using (var context = new OsbideProcs())
     {
         var minDate  = new DateTime(2000, 1, 1);
         var anyValue = -1;
         return((from p in context.GetProcedureData((!criteria.DateFrom.HasValue || criteria.DateFrom < minDate) ? minDate : criteria.DateFrom,
                                                    (!criteria.DateTo.HasValue || criteria.DateTo < minDate) ? DateTime.Today : criteria.DateTo,
                                                    criteria.StudentId.HasValue ? criteria.StudentId.Value : anyValue,
                                                    criteria.NameToken == null ? string.Empty : criteria.NameToken,
                                                    criteria.GenderId,
                                                    criteria.AgeFrom,
                                                    criteria.AgeTo,
                                                    criteria.CourseId,
                                                    criteria.Deliverable,
                                                    criteria.GradeFrom.HasValue ? criteria.GradeFrom.Value : anyValue,
                                                    criteria.GradeTo.HasValue ? criteria.GradeTo.Value : anyValue)
                 select new StudentDemographicInfo
         {
             Name = p.FirstName + " " + p.LastName,
             Age = p.Age,
             Class = p.Prefix + " " + p.CourseNumber + ", " + p.Season + " " + p.Year,
             Gender = p.Gender,
             Deliverable = p.Deliverable,
             Ethnicity = p.Ethnicity,
             Id = p.UserId,
             InstitutionId = p.InstitutionId,
             Grade = p.Grade,
         }).ToList());
     }
 }
Example #2
0
 public static IEnumerable <Comment> Get(string logIds, int currentUserId)
 {
     using (var context = new OsbideProcs())
     {
         return(ReadResults(context.GetComments(logIds, currentUserId)));
     }
 }
Example #3
0
 public static IEnumerable <ErrorListItem> Get(int?senderId, DateTime?timeframe)
 {
     using (var context = new OsbideProcs())
     {
         return(ReadResults(context.GetRecentCompileErrors(senderId, timeframe)));
     }
 }
 public static List <StudentDemographicInfo> Get(Criteria criteria)
 {
     using (var context = new OsbideProcs())
     {
         var minDate = new DateTime(2000, 1, 1);
         return((from p in context.GetProcedureData(criteria.DateFrom < minDate ? minDate : criteria.DateFrom,
                                                    criteria.DateTo < minDate ? DateTime.Today : criteria.DateTo,
                                                    criteria.NameToken,
                                                    criteria.GenderId,
                                                    criteria.AgeFrom,
                                                    criteria.AgeTo,
                                                    criteria.CourseId,
                                                    criteria.Year,
                                                    criteria.GradeFrom,
                                                    criteria.GradeTo,
                                                    criteria.OverallGradeFrom,
                                                    criteria.OverallGradeTo)
                 select new StudentDemographicInfo
         {
             Name = p.Name,
             Age = p.Age,
             Class = p.Class_Class,
             Gender = p.Gender_Gend,
             Year = p.Year,
             Quarter = p.Semester,
             Ethnicity = p.Ethnicity_Ethn,
             Id = p.Id,
             InstitutionId = p.InstitutionId,
             Grade = 100,
             OverallGrade = 100,
         }).ToList());
     }
 }
Example #5
0
 public static void Update(int?postid, int?userid, bool val)
 {
     using (var context = new OsbideProcs())
     {
         context.MarkRead(postid, userid, val);
     }
 }
Example #6
0
        public static CloudTable GetTableReference(string tableName)
        {
            try
            {
                var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);
                var tableClient    = storageAccount.CreateCloudTableClient();
                var table          = tableClient.GetTableReference(tableName);
                if (table.CreateIfNotExists())
                {
                    // log a record in PassiveSocialEventProcessLog table
                    using (var context = new OsbideProcs())
                    {
                        context.InsertPassiveSocialEventProcessLog(table.Name);
                    }
                }

                return(table);
            }
            catch (Exception ex)
            {
                // need to do this due to the unstability of Azure
                var msg = ex.Message;

                throw;
            }
        }
Example #7
0
 public static List <int> GetDocUsers()
 {
     using (var context = new OsbideProcs())
     {
         return((from p in context.GetBuildDocUtilUsers()
                 select p.Value).ToList());
     }
 }
Example #8
0
        public static DailyAggregations GetDailyAggregates(DateTime?startDate, DateTime?endDate, List <int> users, int?courseId, string selectedMeasures, bool isAvg)
        {
            using (var context = new OsbideProcs())
            {
                var selectedMeasureNames = string.IsNullOrWhiteSpace(selectedMeasures)
                                         ? string.Empty
                                         : string.Join(",", selectedMeasures.Split(',').Select(x => (MeasureType)Enum.Parse(typeof(MeasureType), x)).ToArray());
                var dailyAggregatesRaw = context.GetCalendarMeasuresByDay(startDate, endDate, users == null? string.Empty : string.Join(",", users), courseId, selectedMeasureNames, isAvg)
                                         .GroupBy(x => x.Measure)
                                         .ToDictionary(x => x.Key, x => x.ToList());

                if (dailyAggregatesRaw.Count > 0)
                {
                    var measureDictionary = MeasureDefinitions.All.Values.SelectMany(x => x).ToList();

                    var activities = dailyAggregatesRaw.Values.SelectMany(x => x).ToList()
                                     .Where(x => x.Value < 0)
                                     // month starts from 0 to 11 in JavaScript!!!
                                     .Select(x => new Activity {
                        Day = x.EventDay.Value.Day, Month = x.EventDay.Value.Month - 1, Name = x.Measure
                    })
                                     .ToList();

                    var measures = new List <Measure>();
                    foreach (var key in dailyAggregatesRaw.Keys)
                    {
                        if (dailyAggregatesRaw[key].Any(x => x.Value.HasValue && x.Value.Value > 0))
                        {
                            var ms = measureDictionary.Where(x => x.MeasureType.ToString() == key).Single();
                            measures.Add(
                                new Measure
                            {
                                Title          = key.ToDisplayText(),
                                DataPointShape = ms.DataPointShape,
                                Color          = ms.Color,
                                // month starts from 0 to 11 in JavaScript!!!
                                Aggregates = dailyAggregatesRaw[key].Select(x => new Aggregate {
                                    Day = x.EventDay.Value.Day, Month = x.EventDay.Value.Month - 1, Value = x.Value.Value
                                }).ToList(),
                                FirstDataPointMonth = dailyAggregatesRaw[key].Min(x => x.EventDay.Value).Month - 1,
                                FirstDataPointDay   = dailyAggregatesRaw[key].Min(x => x.EventDay.Value).Day,
                                LastDataPointMonth  = dailyAggregatesRaw[key].Max(x => x.EventDay.Value).Month - 1,
                                LastDataPointDay    = dailyAggregatesRaw[key].Max(x => x.EventDay.Value).Day,
                                Avg = dailyAggregatesRaw[key].Average(x => x.Value.Value),
                                Max = dailyAggregatesRaw[key].Max(x => x.Value.Value),
                                Min = dailyAggregatesRaw[key].Min(x => x.Value.Value),
                            });
                        }
                    }

                    return(new DailyAggregations {
                        Activities = activities, Measures = measures
                    });
                }

                return(null);
            }
        }
Example #9
0
 public static List <Tag> Run(string query, bool isHandle)
 {
     using (var context = new OsbideProcs())
     {
         return(context.GetHashtags(query, isHandle).Select(t => new Tag {
             Id = t.Id, Name = t.Tag, IsHandle = t.IsHandle
         }).ToList());
     }
 }
Example #10
0
 public static List <ErrorFixTimeStats> Get()
 {
     using (var context = new OsbideProcs())
     {
         return((from e in context.GetErrorFixTimeStats()
                 select new ErrorFixTimeStats
         {
             ErrorTypeId = e.ErrorTypeId,
             Mean = e.Mean,
             SD = e.StandardDeviation,
             SDP = e.PopulationStandardDeviation,
         }).ToList());
     }
 }
Example #11
0
 public static List <string> GetDeliverables(int courseId, DateTime?dateFrom = null, DateTime?dateTo = null)
 {
     using (var context = new OsbideProcs())
     {
         if (!dateFrom.HasValue)
         {
             dateFrom = new DateTime(2010, 1, 1);
         }
         if (!dateTo.HasValue)
         {
             dateTo = DateTime.Today.AddDays(1);
         }
         return((from d in context.GetDeliverableLookup(courseId, dateFrom, dateTo) select d).ToList());
     }
 }
Example #12
0
        public static IEnumerable <FeedItem> GetActivityFeeds(DateTime dateReceivedMin, DateTime dateReceivedMax,
                                                              IEnumerable <int> logIds, IEnumerable <int> eventTypes,
                                                              int?courseId, int?roleId, string commentFilter,
                                                              IEnumerable <int> senderIds, int?minLogId, int?maxLogId, int offsetN, int?topN)
        {
            using (var context = new OsbideProcs())
            {
                var c = commentFilter.Length > 0 ? string.Format("%{0}%", commentFilter) : string.Empty;
                var l = string.Join(",", logIds.Where(i => i > 0).ToArray());
                var t = eventTypes.Count() > 0 ? string.Format("{0}", string.Join(",", eventTypes)) : string.Empty;
                var s = string.Join(",", senderIds.Where(i => i > 0).ToArray());

                return(ReadResults(context.GetActivityFeeds(dateReceivedMin, dateReceivedMax, l, t, courseId, roleId, c, s, minLogId, maxLogId, offsetN, topN)));
            }
        }
Example #13
0
        public static List <CourseLookup> GetCourses()
        {
            using (var context = new OsbideProcs())
            {
                var courses = (from c in context.GetCourseLookup()
                               select new CourseLookup {
                    CourseId = c.CourseId, DisplayText = c.CourseName
                }).ToList();

                courses.Insert(0, new CourseLookup {
                    CourseId = -1, DisplayText = "Any"
                });

                return(courses);
            }
        }
Example #14
0
 public List <EventLogType> Get()
 {
     using (var context = new OsbideProcs())
     {
         return((from e in context.GetEventTypes()
                 select new EventLogType
         {
             LogTypeId = (EventType)e.LogTypeId,
             LogyTypeName = e.LogTypeName,
             DisplayName = e.DisplayName,
             IsSocial = e.IsSocial,
             IsIDE = e.IsIDE,
             IsFeed = e.IsFeed,
         }).ToList());
     }
 }
Example #15
0
        public static List <AgeLookup> GetAges()
        {
            using (var context = new OsbideProcs())
            {
                var ages = (from a in context.GetAgeLookup()
                            select new AgeLookup {
                    Age = a.Age.Value, DisplayText = a.Age.Value.ToString()
                }).ToList();

                ages.Insert(0, new AgeLookup {
                    Age = -1, DisplayText = "Any"
                });

                return(ages);
            }
        }
Example #16
0
 public static List <GenderLookup> GetGenders()
 {
     using (var context = new OsbideProcs())
     {
         return(new List <GenderLookup>
         {
             new GenderLookup {
                 GenderId = (int)OSBIDE.Library.Models.Gender.Unknown, DisplayText = "Any"
             },
             new GenderLookup {
                 GenderId = (int)OSBIDE.Library.Models.Gender.Female, DisplayText = "Female"
             },
             new GenderLookup {
                 GenderId = (int)OSBIDE.Library.Models.Gender.Male, DisplayText = "Male"
             },
         });
     }
 }
Example #17
0
 public static List <DocUtilDetails> GetDocs(IEnumerable <int> userIds)
 {
     using (var context = new OsbideProcs())
     {
         return((from p in context.GetBuildDocUtilBatch(string.Join(",", userIds.Where(x => x > 0)))
                 select new DocUtilDetails
         {
             LogId = p.Id,
             UserId = p.SenderId,
             EventDate = p.EventDate,
             SolutionName = p.SolutionName,
             FileName = p.FileName,
             Document = p.Content,
             BuildId = p.BuildId,
             DocumentId = p.DocumentId,
         })
                .ToList());
     }
 }
Example #18
0
 public static List <TrendAndNotification> GetTrendAndNotification(int userId, int topN, bool getAll)
 {
     using (var context = new OsbideProcs())
     {
         return(context.GetTrendsAndNotifications(userId, topN, getAll)
                .Select(t => new TrendAndNotification
         {
             FirstName = t.FirstName,
             LastName = t.LastName,
             Viewed = t.Viewed,
             UserId = t.UserId,
             EventLogId = t.EventLogId,
             HashtagId = t.HashtagId,
             Hashtag = t.Hashtag,
             HashtagCounts = t.Counts,
         })
                .ToList());
     }
 }
        public static bool Run()
        {
            using (var context = new OsbideProcs())
            {
                var prevProcessInfo     = context.GetActiveSocialEventProcessInfo().ToList();
                var pocessedLogId       = prevProcessInfo.First().Info;
                var maxUnprocessedLogId = prevProcessInfo.Last().Info;

                var batches = (maxUnprocessedLogId - pocessedLogId) / BATCH_SIZE;
                for (var b = 0; b < batches + 1; b++)
                {
                    var firstRow = pocessedLogId + b * BATCH_SIZE;
                    var lastRow  = pocessedLogId + (b + 1) * BATCH_SIZE < maxUnprocessedLogId ? pocessedLogId + (b + 1) * BATCH_SIZE : maxUnprocessedLogId + 1;

                    DynamicSQLExecutor.Execute(string.Format(SQLTemplateUpdateActiveSocialEvents.Template, firstRow, lastRow));
                }

                return(true);
            }
        }
Example #20
0
        private static List <ErrorTypeDetails> GetErrorTypes(OsbideProcs context, string eventLogIds, bool includeErrorFixInfo)
        {
            if (includeErrorFixInfo)
            {
                return((from e in context.GetWatwinScoringErrorTypeData(eventLogIds)
                        select new ErrorTypeDetails
                {
                    LogId = e.LogId,
                    ErrorTypeId = e.BuildErrorTypeId,
                    ErrorType = e.BuildErrorType,
                    FixingTime = e.TimeToFix.HasValue ? e.TimeToFix.Value : 2592000,         /*30 days in seconds*/
                }).ToList());
            }

            return((from e in context.GetErrorQuotientErrorTypeData(eventLogIds)
                    select new ErrorTypeDetails
            {
                LogId = e.LogId,
                ErrorTypeId = e.ErrorTypeId,
            }).ToList());
        }
        public static bool Run(int schoolId)
        {
            using (var context = new OsbideProcs())
            {
                // storage tables not completely processed
                foreach (var table in context.GetPassiveSocialEventProcessLog())
                {
                    var passiveSocialEvents = DomainObjectHelpers.GetPassiveSocialActivities(table.SourceTableName, schoolId).ToList();
                    var totalCounts         = passiveSocialEvents.Count;

                    var processedCounts = table.ProcessedRecordCounts.HasValue ? table.ProcessedRecordCounts.Value : 0;
                    var batches         = (totalCounts - processedCounts) / BATCH_SIZE;
                    for (var b = 0; b < batches + 1; b++)
                    {
                        var tsql = new StringBuilder();

                        var firstRow = processedCounts + b * BATCH_SIZE;
                        var lastRow  = processedCounts + (b + 1) * BATCH_SIZE > totalCounts ? totalCounts : processedCounts + (b + 1) * BATCH_SIZE;

                        for (var idx = firstRow; idx < lastRow; idx++)
                        {
                            var sql = GetSQLRowStatement(passiveSocialEvents[idx]);
                            if (sql.Length > 0)
                            {
                                // build batch insert statements
                                tsql.AppendFormat("{0}{1}", sql, Environment.NewLine);
                            }
                        }

                        // batch execution and log updates
                        DynamicSQLExecutor.Execute(tsql.ToString());
                        context.UpdatePassiveSocialEventProcessLog(table.Id, DESTINATIONTABLE, lastRow == totalCounts, lastRow);
                    }
                }

                return(true);
            }
        }
        public static List <TimelineChartData> Get(DateTime?dateFrom, DateTime?dateTo, IEnumerable <int> userIds, TimeScale timescale, int?timeout, bool grayscale, bool?realtime)
        {
            // need a min DateTime value to avoid SQL server param out of range
            var unspecifiedDate = new DateTime(2000, 1, 1);
            var timeFrom        = dateFrom.HasValue ? dateFrom.Value : unspecifiedDate;
            var timeTo          = dateTo.HasValue ? dateTo.Value : unspecifiedDate;

            var timeoutVal = timeout.HasValue ? timeout.Value : VisualizationParams.DEFAULT_TIMEOUT;

            using (var context = new OsbideProcs())
            {
                // get raw data from database and sort by user and event time
                var rawR = realtime.HasValue && realtime.Value == true
                         ? (from e in context.GetStateMachineEvents(timeFrom, timeTo, string.Join(",", userIds))
                            select e).ToList().OrderBy(x => x.SenderId).ThenBy(x => x.EventDate)
                         : (from e in context.GetPrecalculatedStateMachineEvents(timeFrom, timeTo, string.Join(",", userIds))
                            select e).ToList().OrderBy(x => x.SenderId).ThenBy(x => x.EventDate);

                // set the actual data range
                if (timeFrom == unspecifiedDate)
                {
                    timeFrom = rawR.Min(x => x.EventDate);
                }
                if (timeTo == unspecifiedDate)
                {
                    timeTo = rawR.Max(x => x.EventDate);
                }

                var totalMinutes = (int)(timeTo - timeFrom).TotalMinutes;

                // chart data timeline
                var chartData       = new List <TimelineChartData>();
                var currentSolution = string.Empty;
                var prevStateName   = ProgrammingState.edit_syn_u_sem_u;

                // previous build error is used for figuring out the next state of start without debugging event
                var lastBuildErrorLogId = rawR.First().BuildErrorLogId;

                foreach (var r in rawR)
                {
                    // processing the flat events and compose a list of programming states for each user
                    // the composed list of programming states are ordered by the event time
                    // so the output is a collection of state timelines for the list of users
                    var currEventTime  = r.EventDate;
                    var currEventPoint = (currEventTime - timeFrom).TotalMinutes;

                    // init local variables
                    if (string.Compare(r.SolutionName, currentSolution, true) != 0)
                    {
                        currentSolution = r.SolutionName;
                        prevStateName   = ProgrammingState.edit_syn_u_sem_u;
                    }

                    // process one user at a time
                    var userData = chartData.SingleOrDefault(x => x.UserId == r.SenderId);

                    // a new user's timeline?
                    if (userData == null)
                    {
                        // yes, create a new timeline entry
                        #region a new user timeline

                        // since each bullet svg is drawn independently
                        // the high level information needs to be passed into each svg drawing routine
                        userData = new TimelineChartData
                        {
                            UserId   = r.SenderId,
                            title    = string.Format("{0} {1}", r.FirstName, r.LastName),
                            markers  = new List <Point>(),
                            measures = new List <State>(),
                        };

                        // is the first event in idle timeout range?
                        if ((currEventTime - timeFrom).TotalMinutes > timeoutVal)
                        {
                            // no, insert an idle state from the beginning to now
                            prevStateName = ProgrammingState.idle;
                            var uiproperties = TimelineStateDictionaries.UIProperties[prevStateName];
                            var idleState    = new State
                            {
                                ProgrammingState = prevStateName,
                                Name             = uiproperties.Label,
                                CssClass         = grayscale ? uiproperties.CssGray : uiproperties.Css,
                                StartTime        = timeFrom,
                                ShiftedStartTime = timeFrom,
                                StartPoint       = 0,
                                EndTime          = currEventTime,
                                EndPoint         = currEventPoint,
                            };
                            userData.measures.Add(idleState);
                        }
                        else
                        {
                            // yes, insert a default programming state
                            prevStateName = ProgrammingState.edit_syn_u_sem_u;
                            var uiproperties = TimelineStateDictionaries.UIProperties[prevStateName];
                            var defaultState = new State
                            {
                                ProgrammingState = prevStateName,
                                Name             = uiproperties.Label,
                                CssClass         = grayscale ? uiproperties.CssGray : uiproperties.Css,
                                StartTime        = timeFrom,
                                ShiftedStartTime = timeFrom,
                                StartPoint       = 0,
                                EndTime          = timeTo,
                                EndPoint         = totalMinutes,
                            };
                            userData.measures.Add(defaultState);
                        }

                        chartData.Add(userData);

                        #endregion

                        // reset for a new user
                        lastBuildErrorLogId = null;
                    }

                    // is this a social event?
                    if (!string.IsNullOrWhiteSpace(r.MarkerType))
                    {
                        // yes, add social media event marker
                        userData.markers.Add(new Point {
                            Name = r.MarkerType, Position = currEventPoint, EventTime = r.EventDate
                        });
                    }
                    else
                    {
                        // no, transition to next state based on the previous state
                        // non-social event could be a state transition trigger

                        // first to check the timespan between current and previous non-idle state events

                        #region insert an idle state if the timespan between this event and previous event is too long

                        var prevState     = userData.measures.Last();
                        var prevEventTime = prevState.ShiftedStartTime;
                        prevStateName = prevState.ProgrammingState;

                        if ((currEventTime - prevEventTime).TotalMinutes > timeoutVal)
                        {
                            if (prevStateName == ProgrammingState.idle)
                            {
                                // extend the initial idle state to avoid the extra rectangle
                                prevState.EndTime  = currEventTime;
                                prevState.EndPoint = currEventPoint;
                            }
                            else
                            {
                                #region add a new idle state

                                prevStateName = ProgrammingState.idle;
                                var uiproperties = TimelineStateDictionaries.UIProperties[prevStateName];
                                var idleState    = new State
                                {
                                    ProgrammingState = prevStateName,
                                    Name             = uiproperties.Label,
                                    CssClass         = grayscale ? uiproperties.CssGray : uiproperties.Css,
                                    StartTime        = prevEventTime.AddMinutes(timeoutVal),
                                    StartPoint       = (prevEventTime - timeFrom).TotalMinutes + timeoutVal,
                                    EndTime          = currEventTime,
                                    EndPoint         = currEventPoint,
                                };
                                userData.measures.Add(idleState);

                                // terminate previous non-idle state
                                prevState.EndTime  = idleState.StartTime;
                                prevState.EndPoint = idleState.StartPoint;

                                prevState = idleState;

                                #endregion
                            }
                        }

                        #endregion

                        // resolve next state name from current state and current event
                        #region get next programming state from state dictionaries

                        var nextStateName = prevStateName;
                        if (prevStateName == ProgrammingState.idle && prevState.StartTime > timeFrom)
                        {
                            // if currently in idle but not the first idle state, use the last non-idle state to calculate the next state
                            prevStateName = userData.measures.Last(x => x.ProgrammingState != ProgrammingState.idle).ProgrammingState;
                        }
                        // look up next programming state from the transition tables
                        if (string.Compare(r.LogType, "BuildEvent", true) == 0)
                        {
                            nextStateName = r.BuildErrorLogId.HasValue
                                            ? TimelineStateDictionaries.NextStateForBuildWithError[prevStateName]
                                            : TimelineStateDictionaries.NextStateForBuildWithoutError[prevStateName];

                            lastBuildErrorLogId = r.BuildErrorLogId.HasValue ? (int?)r.BuildErrorLogId.Value : null;
                        }
                        else if (string.Compare(r.LogType, "DebugEvent", true) == 0 && r.ExecutionActionId.HasValue)
                        {
                            nextStateName = GetNextStateForDebugEvent(userData, prevStateName, r.ExecutionActionId.Value, lastBuildErrorLogId);

                            // the next event's previous event (this one) is not a build event
                            lastBuildErrorLogId = null;
                        }
                        else if (string.Compare(r.LogType, "ExceptionEvent", true) == 0 && (prevStateName == ProgrammingState.debug_sem_u || prevStateName == ProgrammingState.idle))
                        {
                            nextStateName = TimelineStateDictionaries.NextStateForExceptionEvent[prevStateName];

                            // the next event's previous event (this one) is not a build event
                            lastBuildErrorLogId = null;
                        }
                        else if (TimelineStateDictionaries.EditorEvents.Any(x => string.Compare(x, r.LogType, true) == 0))
                        {
                            nextStateName = TimelineStateDictionaries.NextStateForEditorEvent[prevStateName];
                        }

                        #endregion

                        // terminate previous state and append the next state if it's changed
                        if (nextStateName != prevState.ProgrammingState)
                        {
                            #region append new state

                            // idle state is instantiated with a valid termination date
                            // when idle state is created, it also terminates the previous state (timeout)
                            if (prevState.EndTime == timeTo)
                            {
                                // terminate previous non-idle state
                                prevState.EndTime  = currEventTime;
                                prevState.EndPoint = currEventPoint;
                            }

                            var uiproperties = TimelineStateDictionaries.UIProperties[nextStateName];
                            userData.measures.Add(new State
                            {
                                // new state
                                ProgrammingState = nextStateName,
                                Name             = uiproperties.Label,
                                CssClass         = grayscale ? uiproperties.CssGray : uiproperties.Css,
                                StartTime        = currEventTime,
                                ShiftedStartTime = currEventTime,
                                StartPoint       = currEventPoint,
                                EndTime          = timeTo,
                                EndPoint         = totalMinutes,
                            });

                            #endregion
                        }
                        else
                        {
                            // update continous state start time so it won't timeout to idle state
                            prevState.ShiftedStartTime = currEventTime;
                        }
                    }
                }

                #region append idle state to the end if necessary

                chartData.ForEach(x =>
                {
                    var lastMeasure = x.measures.Last();
                    if (lastMeasure.EndTime == timeTo && (timeTo - lastMeasure.ShiftedStartTime).TotalMinutes > timeoutVal)
                    {
                        // prepare a new idle state for the end
                        var uiproperties = TimelineStateDictionaries.UIProperties[ProgrammingState.idle];
                        var idleState    = new State
                        {
                            ProgrammingState = ProgrammingState.idle,
                            Name             = uiproperties.Label,
                            CssClass         = grayscale ? uiproperties.CssGray : uiproperties.Css,
                            StartTime        = lastMeasure.StartTime.AddMinutes(timeoutVal),
                            StartPoint       = lastMeasure.StartPoint + timeoutVal,
                            EndTime          = lastMeasure.EndTime,
                            EndPoint         = lastMeasure.EndPoint,
                        };
                        x.measures.Add(idleState);

                        // terminate the lastMeasure state
                        lastMeasure.EndTime  = idleState.StartTime;
                        lastMeasure.EndPoint = idleState.StartPoint;
                    }
                    else if (lastMeasure.ProgrammingState == ProgrammingState.idle)
                    {
                        lastMeasure.EndTime  = timeTo;
                        lastMeasure.EndPoint = totalMinutes;
                    }
                });

                #endregion

                // only show horizontal x-axis for the last series
                if (chartData.Count > 0)
                {
                    chartData.Last().showTicks = true;
                }

                return(chartData);
            }
        }
Example #23
0
        /// <summary>
        /// build a list of qualified error quotient events with error types and documents
        /// </summary>
        /// <param name="dateFrom"></param>
        /// <param name="dateTo"></param>
        /// <param name="userIds"></param>
        /// <returns></returns>
        public static List <BuildErrorEvent> Get(DateTime?dateFrom, DateTime?dateTo, IEnumerable <int> userIds, bool includeErrorFixInfo = false)
        {
            using (var context = new OsbideProcs())
            {
                #region filter qualified build error event for the selected users
                // filter qualified build error event for the selected users
                var minDate = new DateTime(2000, 1, 1);
                var events  = (from e in context.GetErrorQuotientSessionData((!dateFrom.HasValue || dateFrom.Value < minDate) ? minDate : dateFrom,
                                                                             (!dateTo.HasValue || dateTo.Value < minDate) ? DateTime.Today : dateTo,
                                                                             string.Join(",", userIds))
                               select new BuildErrorEvent
                {
                    BuildId = e.BuildId,
                    LogId = e.LogId,
                    UserId = e.SenderId,
                    EventDate = e.EventDate,
                }).ToList();
                #endregion

                var eventLogIds = string.Join(",", events.Select(e => e.LogId));

                // error types for the resultant build error events
                var errorTypes = GetErrorTypes(context, eventLogIds, includeErrorFixInfo);

                #region error messages for the resultant build error events
                // error messages for the resultant build error events
                var errorMessages = new List <GetBuildErrorMessages_Result>();
                if (includeErrorFixInfo)
                {
                    errorMessages = (from e in context.GetBuildErrorMessages(eventLogIds) select e).ToList();
                }
                #endregion

                // error documents for the resultant build error events
                var errorDocs = (from d in context.GetErrorQuotientDocumentData(string.Join(",", events.Select(e => e.BuildId))) select d).ToList();

                #region associate error types and documents to the build error events
                // associate error types and documents to the build error events
                foreach (var e in events)
                {
                    // error types
                    var et = errorTypes.Where(t => t.LogId == e.LogId).ToList();
                    if (et.Count > 0)
                    {
                        e.ErrorTypes = et;
                    }

                    // error messages
                    var em = errorMessages.Where(m => m.LogId == e.LogId).Select(m => m.ErrorMessage).ToList();
                    if (em.Count > 0)
                    {
                        e.ErrorMessages = em;
                    }

                    // error documents
                    var ed = errorDocs.Where(d => d.BuildId == e.BuildId)
                             .Select(d => new ErrorDocumentInfo
                    {
                        DocumentId       = d.DocumentId,
                        Line             = d.Line,
                        Column           = d.Column,
                        FileName         = d.FileName,
                        NumberOfModified = d.NumberOfModified != null && d.NumberOfModified.HasValue ? d.NumberOfModified.Value : 0,
                        ModifiedLines    = d.ModifiedLines != null && d.ModifiedLines.Length > 0 ? d.ModifiedLines.Split(',').Select(l => Convert.ToInt32(l)).ToList() : null
                    })
                             .ToList();
                    if (ed.Count > 0)
                    {
                        e.Documents = ed;
                    }
                }
                #endregion

                return(events);
            }
        }