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;
        }
示例#3
0
        //
        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);
        }