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(); }
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); } }
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()); } }
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; }
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); }