public static void ConvertGitHubUserDataToHaloUserAsync(GitHubUserData userData, ref User user)
        {
            //DaysActive => 'size':       (float),
            //Velocity => 'speed':      (float),
            //PullConversionRate => 'brightness': (float),
            //Complexity(inverse) =>       'complexity': (float),
            //CreateEventCount => 'color':      (float),
            //Total Code Line Count =>       'wobble':     (float),
            //PushEventCount => 'colorCenter': (float),
            //PullEventCount => 'colorCenterRatio': (float),
            //EventFrequencyCount    'waveCount':  (int),
            //OverallContributorRanking => 'highlightRing': (float)
            // that last one is... by adding up all the other ones, sort all users by total, then rank order

            user.Size             = Normalize(userData.GetDaysActive());
            user.Speed            = userData.GetVelocity();
            user.Brightness       = userData.GetPullConversionRate();
            user.Complexity       = userData.GetPullConversionRate();         // $todo
            user.Color            = Normalize(userData.GetEventFrequency());
            user.Wobble           = Normalize(userData.GetNumberOfCommits()); // $todo GetTotalLinesOfCode broken because of private repos not reporting data
            user.ColorCenter      = Normalize(userData.GetPushEventCount());
            user.ColorCenterRatio = Normalize(userData.GetPullRequestEventCount());
            user.WaveCount        = userData.GetCreateEventCount();
            user.HighlightRing    = Normalize(userData.GetCreateEventCount() + userData.GetPushEventCount());          // $todo

            //raw github metrics (for prototyping halo)
            user.CreateEventCount   = userData.GetCreateEventCount();
            user.PushEventCount     = userData.GetPushEventCount();
            user.CommitCount        = userData.GetNumberOfCommits();
            user.PullRequestCount   = userData.GetPullRequestEventCount();
            user.DaysActive         = userData.GetDaysActive();
            user.ActionVelocity     = userData.GetVelocity();
            user.PullConversionRate = userData.GetPullConversionRate();
        }
Example #2
0
        static int Main(string[] args)
        {
            if (args.Count() > 0)
            {
                string gitHubUserName = args[0];

                try
                {
                    GitHubUserData userData = RetrieveUserDataAsync(gitHubUserName).Result;
                    HaloDBHelpers.UpdateUserAsync(userData, DBClientSingleton.Instance.Get()).Wait();

                    return(0);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception caught: " + e.ToString());
                    return(-1);
                }
            }
            else
            {
                JobHostConfiguration config = new JobHostConfiguration();
                config.StorageConnectionString   = ConfigurationManager.AppSettings["WebJobStorage"];
                config.DashboardConnectionString = null;
                config.Queues.BatchSize          = 1;
                config.UseCore();
                JobHost host = new JobHost(config);
                host.RunAndBlock();

                return(0);
            }
        }
Example #3
0
        public static async Task GetCommitDetailsForPushEvents(GitHubUserData userData)
        {
            foreach (Event evt in userData.GetEventsOfType(EventType.PushEvent).Where(e => e.isPublic))
            {
                PushEventPayload payload = evt.payload as PushEventPayload;
                foreach (Commit commit in payload.Commits)
                {
                    string jsonString = await HttpRequestHelper.DoRequestCommitDetailsAsync(userData.UserName, evt.repository.name, commit.sha);

                    commit.details = JsonConvert.DeserializeObject <CommitDetails>(jsonString, new JsonSerializerSettings
                    {
                        Error = Program.HandleDeserializationError
                    });
                }
            }
        }
        public static async Task UpdateUserAsync(GitHubUserData userData, IEntityDBClient dbClient)
        {
            try
            {
                User user = await dbClient.GetUserByUsernameAsync(userData.UserName);

                ConvertGitHubUserDataToHaloUserAsync(userData, ref user);

                await dbClient.Update <User>(user);

                //user = await dbClient.GetUserByUsernameAsync(userData.UserName);

                return;
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception caught: " + e.ToString());
            }
        }
Example #5
0
        public static async Task ProcessQueueMessage(
            [QueueTrigger("giteventprocessorqueue")] string jsonMessagePayloadString,
            [Blob("containername/blobname")] TextWriter writer)
        {
            JsonMessagePayload messagePayload = JsonConvert.DeserializeObject <JsonMessagePayload>(jsonMessagePayloadString);

            if (messagePayload == null ||
                string.IsNullOrWhiteSpace(messagePayload.gitHubUserName))
            {
                return;
            }

            Console.WriteLine("ProcessQueueMessage - Retrieving data for gitHubUserName: " + messagePayload.gitHubUserName);

            GitHubUserData userData = await RetrieveUserDataAsync(messagePayload.gitHubUserName);

            await HaloDBHelpers.UpdateUserAsync(userData, DBClientSingleton.Instance.Get());

            return;
        }
Example #6
0
        public static async Task <GitHubUserData> RetrieveUserDataAsync(string gitHubUserName)
        {
            string jsonString = await HttpRequestHelper.DoRequestAsync(gitHubUserName);

            Console.WriteLine(jsonString);

            GitHubUserData userData = new GitHubUserData();

            userData.UserName = gitHubUserName;
            userData.Events   = JsonConvert.DeserializeObject <IList <Event> >(jsonString, new JsonSerializerSettings
            {
                Error = Program.HandleDeserializationError
            });

            // $todo We'll hit rate-limits for non-authenticated callers of the GitHub APIs! We'll
            // need to support authenticated calls to GitHub before we uncomment the below.
            // Details on the rate limiting here: https://developer.github.com/v3/#rate-limiting

            // await GetCommitDetailsForPushEvents(userData);

            return(userData);
        }