private void AnalyseSuspensions(List <Suspension> suspensions) { TotalSuspensions = suspensions.Count; TotalBans = suspensions.Count(x => x.SuspensionType == SuspensionType.Ban); TotalTimeouts = suspensions.Count(x => x.SuspensionType == SuspensionType.Timeout); UniqueUsersSuspensions = suspensions.DistinctBy(x => x.Username).Count(); UniqueUsersTimeout = suspensions.DistinctBy(x => x.Username).Count(x => x.SuspensionType == SuspensionType.Timeout); UniqueUsersBan = suspensions.DistinctBy(x => x.Username).Count(x => x.SuspensionType == SuspensionType.Ban); var suspensionsOnDate = new Dictionary <DateTime, List <Suspension> >(); foreach (var group in suspensions.GroupBy(x => x.Timestamp.Date)) { suspensionsOnDate.Add(group.Key, group.ToList()); } foreach (var suspensionDate in suspensionsOnDate) { SuspensionsPerDay.Add(suspensionDate.Key, suspensionDate.Value.Count); BansPerDay.Add(suspensionDate.Key, suspensionDate.Value.Count(x => x.SuspensionType == SuspensionType.Ban)); TimeoutsPerDay.Add(suspensionDate.Key, suspensionDate.Value.Count(x => x.SuspensionType == SuspensionType.Timeout)); } foreach (var group in suspensions.SelectMany(x => x.Tags).GroupBy(x => x.TagId)) { TagAppearances.Add(group.First(), group.Count()); } }
public SystemReport(List <Suspension> unauditedSuspensions, List <Suspension> auditedSuspensions, List <Suspension> systemSuspensions, int uniqueUsers) { AuditedSuspensions = auditedSuspensions; UniqueUsers = uniqueUsers; SystemSuspensions = systemSuspensions; UniqueUsersSuspendedBySystem = systemSuspensions.DistinctBy(x => x.Username, StringComparer.OrdinalIgnoreCase).Count(); ValidTotalSuspensions = auditedSuspensions.Count(x => !x.InvalidSuspension); ValidTotalBans = auditedSuspensions.Count(x => x.SuspensionType == SuspensionType.Ban && !x.InvalidSuspension); ValidTotalTimeouts = auditedSuspensions.Count(x => x.SuspensionType == SuspensionType.Timeout && !x.InvalidSuspension); ValidUniqueUsersSuspensions = auditedSuspensions.DistinctBy(x => x.Username).Count(x => !x.InvalidSuspension); ValidUniqueUsersTimeout = auditedSuspensions.DistinctBy(x => x.Username).Count(x => x.SuspensionType == SuspensionType.Timeout && !x.InvalidSuspension); ValidUniqueUsersBan = auditedSuspensions.DistinctBy(x => x.Username).Count(x => x.SuspensionType == SuspensionType.Ban && !x.InvalidSuspension); InvalidTotalSuspensions = auditedSuspensions.Count(x => x.InvalidSuspension); InvalidTotalBans = auditedSuspensions.Count(x => x.SuspensionType == SuspensionType.Ban && x.InvalidSuspension); InvalidTotalTimeouts = auditedSuspensions.Count(x => x.SuspensionType == SuspensionType.Timeout && x.InvalidSuspension); InvalidUniqueUsersSuspensions = auditedSuspensions.DistinctBy(x => x.Username).Count(x => x.InvalidSuspension); InvalidUniqueUsersTimeout = auditedSuspensions.DistinctBy(x => x.Username).Count(x => x.SuspensionType == SuspensionType.Timeout && x.InvalidSuspension); InvalidUniqueUsersBan = auditedSuspensions.DistinctBy(x => x.Username).Count(x => x.SuspensionType == SuspensionType.Ban && x.InvalidSuspension); var suspensionsOnDate = new Dictionary <DateTime, List <Suspension> >(); foreach (var group in auditedSuspensions.GroupBy(x => x.Timestamp.Date)) { suspensionsOnDate.Add(group.Key, group.ToList()); } foreach (var suspensionDate in suspensionsOnDate) { ValidSuspensionsPerDay.Add(suspensionDate.Key, suspensionDate.Value.Count(x => !x.InvalidSuspension)); ValidBansPerDay.Add(suspensionDate.Key, suspensionDate.Value.Count(x => x.SuspensionType == SuspensionType.Ban && !x.InvalidSuspension)); ValidTimeoutsPerDay.Add(suspensionDate.Key, suspensionDate.Value.Count(x => x.SuspensionType == SuspensionType.Timeout && !x.InvalidSuspension)); InvalidSuspensionsPerDay.Add(suspensionDate.Key, suspensionDate.Value.Count(x => x.InvalidSuspension)); InvalidBansPerDay.Add(suspensionDate.Key, suspensionDate.Value.Count(x => x.SuspensionType == SuspensionType.Ban && x.InvalidSuspension)); InvalidTimeoutsPerDay.Add(suspensionDate.Key, suspensionDate.Value.Count(x => x.SuspensionType == SuspensionType.Timeout && x.InvalidSuspension)); } foreach (var group in auditedSuspensions.Where(x => !x.InvalidSuspension).SelectMany(x => x.Tags).GroupBy(x => x.TagId)) { TagAppearances.Add(group.First(), group.Count()); } UnauditedSuspensions = unauditedSuspensions; }
// public object getallTags(string ID) { // About the Function //Input :{ Video Id } This video Id is produced by Microsoft API //Output : { Json object with Tags } // The response consists of Meta Data retrieved from Microsoft API response // Video Id , Video Name, Tags, Appearences of Tags // Youtube Mapping URL // Decalre Variables // MongoDb Connection Parameters var ConnectionString = "mongodb://*****:*****@ds161175.mlab.com:61175/tagdatabase"; var Mongoclient = new MongoClient(ConnectionString); var db = Mongoclient.GetDatabase("tagdatabase"); var vidCol = db.GetCollection <BsonDocument>("videoCollection"); var tagCol = db.GetCollection <BsonDocument>("tagCollection"); // Microsoft API Connnection Parameters var client = new HttpClient(); var queryString = HttpUtility.ParseQueryString(string.Empty); List <MetaTag> tags = new List <MetaTag>(); var VideoData = new VideoData(); //Check if the video is already been analysed var VideoData_DB = vidCol.Find(new BsonDocument() { { "id", ID } }); // Request parameters queryString["language"] = "en-US"; var uri = "https://videobreakdown.azure-api.net/Breakdowns/Api/Partner/Breakdowns/" + ID; // Request headers // Request Microsoft API to get the tags client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "39dc76f4c2ec4fb38831bb1fe2de6d9e"); var response = client.GetAsync(uri).Result; var json = response.Content.ReadAsStringAsync().Result; JToken json_obj = JObject.Parse(json); // Retrieve VideoID VideoData.VideoId = VideoData.videoId = (string)json_obj.SelectToken("id"); VideoData.videoName = (string)json_obj.SelectToken("name"); JObject firstItemSnippet = JObject.Parse(json_obj["summarizedInsights"].ToString()); VideoData.videoURL = getUrl(VideoData.videoId); var topics = (JArray)firstItemSnippet.SelectToken("topics"); // var list = new List<>(); foreach (var item in topics) { var Tag = new MetaTag(); Tag.tagName = item["name"].ToString(); var appears = item["appearances"]; List <TagAppearances> AppearList = new List <TagAppearances>(); foreach (var app in appears) { var Appearance = new TagAppearances(); Appearance.startTime = app["startSeconds"].ToString(); Appearance.endTime = app["endSeconds"].ToString(); AppearList.Add(Appearance); } Tag.Appearances = AppearList; tags.Add(Tag); } VideoData.Tags = tags; string json_response = JsonConvert.SerializeObject(VideoData); BsonDocument document = VideoData.ToBsonDocument(); vidCol.InsertOne(document); Console.WriteLine(VideoData); return(json_response); }