static IReadOnlyList <RepoStats> CreateIndexStats(CrawledIndex index)
            {
                var indexStats = new List <RepoStats>();

                if (index is not null)
                {
                    foreach (var repo in index.Repos)
                    {
                        var repoStats = new RepoStats
                        {
                            Org                = repo.Org,
                            Repo               = repo.Name,
                            Size               = repo.Size,
                            LastUpdatedAt      = repo.IncrementalUpdateStart,
                            NumberOfOpenIssues = repo.Issues.Values.Count(i => i.IsOpen),
                            NumberOfIssues     = repo.Issues.Count
                        };

                        indexStats.Add(repoStats);
                    }
                }

                return(indexStats.ToArray());
            }
Exemple #2
0
        public async Task Run()
        {
            var client = new GitHubClient(new ProductHeaderValue("TrackRepos"));

            var basicAuth = new Credentials(Environment.GetEnvironmentVariable("GitHubToken"));

            client.Credentials = basicAuth;

            string storageConnectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");

            List <Campaign> campaigns = JsonConvert.DeserializeObject <List <Campaign> >(await _blobService.GetRepos());

            List <RepoStats> stats = new List <RepoStats>();

            foreach (Campaign campaign in campaigns)
            {
                try
                {
                    if (!string.IsNullOrEmpty(campaign.CampaignName) && !string.IsNullOrEmpty(campaign.OrgName))
                    {
                        foreach (Repo repo in campaign.Repos)
                        {
                            if (!string.IsNullOrEmpty(repo.RepoName))
                            {
                                var views = await client.Repository.Traffic.GetViews(campaign.OrgName, repo.RepoName, new RepositoryTrafficRequest(TrafficDayOrWeek.Day));

                                var clones = await client.Repository.Traffic.GetClones(campaign.OrgName, repo.RepoName, new RepositoryTrafficRequest(TrafficDayOrWeek.Day));

                                foreach (var item in views.Views)
                                {
                                    var stat = new RepoStats($"{campaign.CampaignName}{repo.RepoName}", item.Timestamp.UtcDateTime.ToShortDateString().Replace("/", ""))
                                    {
                                        OrgName      = campaign.OrgName,
                                        CampaignName = campaign.CampaignName,
                                        RepoName     = repo.RepoName,
                                        Date         = item.Timestamp.UtcDateTime.ToShortDateString(),
                                        Views        = item.Count,
                                        UniqueUsers  = item.Uniques
                                    };

                                    var clone = clones.Clones.Where(a => a.Timestamp.UtcDateTime.ToShortDateString() == item.Timestamp.UtcDateTime.ToShortDateString()).FirstOrDefault();

                                    if (clone != null)
                                    {
                                        stat.Clones       = clone.Count;
                                        stat.UniqueClones = clone.Uniques;
                                    }
                                    stats.Add(stat);
                                }
                                Thread.Sleep(5000);
                            }
                        }
                    }
                }
                catch (Exception e)
                { }
            }

            string     tableName = "RepoStats";
            CloudTable table     = await _tableService.CreateTableAsync(tableName);

            foreach (var view in stats)
            {
                Console.WriteLine("Insert an Entity.");
                await _tableService.InsertOrMergeEntityAsync(view, "RepoStats");
            }
        }