public List <UserActivityDTO> GetUserActivity(ActivityDTO activity)
        {
            List <UserActivityDTO> user_activities = new List <UserActivityDTO>();

            var user_profiles = dc.UserProfiles.Where(i => i.ProfilePropertyDefinition.PropertyName == activity.settings["Profile"].ToString()).Select(i => new { user_id = i.UserID, gitHub_login = i.PropertyValue }).ToList();

            GitHubClient gitHubClient = new GitHubClient(new ProductHeaderValue("Dnn.CommunityActivity"));

            gitHubClient.Credentials = new Credentials(activity.settings["Credentials"].ToString());

            RepositoryIssueRequest objOptions = new RepositoryIssueRequest();

            objOptions.Filter = IssueFilter.All;
            objOptions.State  = ItemStateFilter.All;

            List <Repository> repositories = new List <Repository>();

            var totalCount = int.MaxValue;
            var page       = 1;

            // get a list of all the repos matching the search criteria
            while (repositories.Count() < totalCount)
            {
                var request = new SearchRepositoriesRequest(activity.settings["Query"].ToString())
                {
                    Page = page,
                };
                var result = gitHubClient.Search.SearchRepo(request).Result;
                totalCount = result.TotalCount;
                repositories.AddRange(result.Items);
                page++;
            }

            foreach (Repository repository in repositories)
            {
                IReadOnlyList <Issue> issues = gitHubClient.Issue.GetAllForRepository(repository.Id, objOptions).Result;
                if (issues.Any())
                {
                    foreach (var user_profile in user_profiles)
                    {
                        Nullable <DateTime> last_activity_date = dc.CommunityMetrics_UserActivities.Where(i => i.user_id == user_profile.user_id && i.activity_id == activity.id).OrderByDescending(i => i.date).Select(i => i.date).FirstOrDefault();

                        var recent_issues = issues
                                            .Where(i =>
                                                   i.User != null &&
                                                   i.User.Login == user_profile.gitHub_login &&
                                                   i.CreatedAt.Date > last_activity_date.GetValueOrDefault() &&
                                                   i.CreatedAt.Date < DateTime.Now.Date
                                                   );

                        foreach (Issue issue in recent_issues)
                        {
                            if (issue.PullRequest == null) // exclude issues which are automatically generated for pull requests
                            {
                                var user_activity = user_activities.Where(i => i.user_id == user_profile.user_id && i.date == issue.CreatedAt.Date).SingleOrDefault();

                                if (user_activity == null)
                                {
                                    user_activity = new UserActivityDTO()
                                    {
                                        user_id     = user_profile.user_id,
                                        activity_id = activity.id,
                                        count       = 0,
                                        date        = issue.CreatedAt.Date
                                    };
                                    user_activities.Add(user_activity);
                                }
                                user_activity.count++;
                            }
                        }
                    }
                }
            }
            return(user_activities);
        }
Esempio n. 2
0
 public List <UserActivityDTO> GetUserActivity(ActivityDTO objActivity)
 {
     return(new List <UserActivityDTO>());
 }
Esempio n. 3
0
        public List <UserActivityDTO> GetUserActivity(ActivityDTO activity)
        {
            List <UserActivityDTO> user_activities = new List <UserActivityDTO>();

            var user_profiles = dc.UserProfiles.Where(i => i.ProfilePropertyDefinition.PropertyName == activity.settings["Profile"].ToString()).Select(i => new { user_id = i.UserID, gitHub_login = i.PropertyValue }).ToList();

            GitHubClient gitHubClient = new GitHubClient(new ProductHeaderValue("Dnn.CommunityActivity"));

            gitHubClient.Credentials = new Credentials(activity.settings["Credentials"].ToString());

            List <Repository> repositories = new List <Repository>();

            var totalCount = int.MaxValue;
            var page       = 1;

            // get a list of all the repos matching the search criteria
            while (repositories.Count() < totalCount)
            {
                var request = new SearchRepositoriesRequest(activity.settings["Query"].ToString())
                {
                    Page = page,
                };
                var result = gitHubClient.Search.SearchRepo(request).Result;
                totalCount = result.TotalCount;
                repositories.AddRange(result.Items);
                page++;
            }

            foreach (Repository repository in repositories)
            {
                IReadOnlyList <GitHubCommit> commits = new List <GitHubCommit>();
                try
                {
                    var commitRequest = new CommitRequest()
                    {
                        Since = DateTime.Now.AddYears(-1) // only scan the last year of activity, otherwise too much data
                    };
                    commits = gitHubClient.Repository.Commit.GetAll(repository.Id, commitRequest).Result;
                }
                catch { };

                foreach (var user_profile in user_profiles)
                {
                    Nullable <DateTime> last_activity_date = dc.CommunityMetrics_UserActivities.Where(i => i.user_id == user_profile.user_id && i.activity_id == activity.id).OrderByDescending(i => i.date).Select(i => i.date).FirstOrDefault();

                    if (commits != null && commits.Count > 0)
                    {
                        //Debug.WriteLine("\n Commits: " + commits.Count.ToString());

                        var recent_commits = commits
                                             .Where(i =>
                                                    i.Author != null &&
                                                    i.Commit != null &&
                                                    i.Commit.Author != null &&
                                                    i.Author.Login == user_profile.gitHub_login &&
                                                    i.Commit.Author.Date > last_activity_date.GetValueOrDefault().Date&&
                                                    i.Commit.Author.Date < DateTime.Now.Date
                                                    )
                                             .ToList();

                        foreach (var commit in recent_commits)
                        {
                            var user_activity = user_activities.Where(i => i.user_id == user_profile.user_id && i.date == commit.Commit.Author.Date.Date).SingleOrDefault();

                            if (user_activity == null)
                            {
                                user_activity = new UserActivityDTO()
                                {
                                    user_id     = user_profile.user_id,
                                    activity_id = activity.id,
                                    count       = 0,
                                    date        = commit.Commit.Author.Date.DateTime
                                };
                                user_activities.Add(user_activity);
                            }

                            user_activity.count++;
                        }
                    }
                }
            }
            return(user_activities);
        }
Esempio n. 4
0
        public CommunityMetrics_Activity ConvertDtoToItem(CommunityMetrics_Activity item, ActivityDTO dto)
        {
            if (item == null)
            {
                item = new CommunityMetrics_Activity();
            }

            if (dto == null)
            {
                return(item);
            }

            item.id          = dto.id;
            item.name        = dto.name;
            item.description = dto.description;
            item.type_name   = dto.type_name;
            item.factor      = dto.factor;
            item.active      = dto.active;
            item.min_daily   = dto.min_daily;
            item.max_daily   = dto.max_daily;

            return(item);
        }