Skip to content

Commit

Permalink
Updated usage locations.
Browse files Browse the repository at this point in the history
  • Loading branch information
CBenghi committed Sep 21, 2020
1 parent c2916b3 commit 246e244
Show file tree
Hide file tree
Showing 3 changed files with 186 additions and 0 deletions.
10 changes: 10 additions & 0 deletions MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,16 @@

</Grid>
</TabItem>
<TabItem Header="GitHub">
<Grid Background="#FFE5E5E5">
<GroupBox Header="Usage stats valid" Margin="10,10,10,0" VerticalAlignment="Top" Height="125">
<Grid>
<Button Margin="10,10,0,0" Click="CommunityStats" VerticalAlignment="Top" HorizontalAlignment="Left" Width="204" >CommunityStats</Button>
<TextBox x:Name="txtAuth" HorizontalAlignment="Left" Height="23" Margin="10,35,0,0" TextWrapping="Wrap" Text="username:password" VerticalAlignment="Top" Width="204"/>
</Grid>
</GroupBox>
</Grid>
</TabItem>
<TabItem Header="OpenCascade">
<Grid Background="#FFE5E5E5">
<TextBox x:Name="OccFolder" Height="23" Margin="120,12,10,0" TextWrapping="Wrap" Text="C:\Data\Dev\occ\occt\src" VerticalAlignment="Top"/>
Expand Down
176 changes: 176 additions & 0 deletions MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
using NuSpecHelper.Occ;
using XbimPlugin.MvdXML.Viewing;
using Settings = NuSpecHelper.Properties.Settings;
using ht = System.Net.Http;
using Newtonsoft.Json.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NuSpecHelper
{
Expand Down Expand Up @@ -507,6 +511,7 @@ private void Usage(object sender, RoutedEventArgs e)
var deser = JsonConvert.DeserializeObject<IpGeo>(jsonData);
// var s = new StatItem(deser);
_geoDictionary.Add(ip, deser);
Debug.WriteLine($"{ip}");
}

string groupItem;
Expand Down Expand Up @@ -841,5 +846,176 @@ private void Geo(object sender, RoutedEventArgs e)
}
}
}

string[] projects = new string[] { "XbimWindowsUI", "XbimEssentials", "XbimGeometry", "XbimWebUI", "XbimExchange", "XbimMvdXML", "XbimGltf", };
// string[] projects = new string[] { "XbimWindowsUI" };

private async System.Threading.Tasks.Task CommunityStatsAsync()
{
var stats = new List<stat>();
var client = new ht.HttpClient();
var byteArray = Encoding.ASCII.GetBytes(txtAuth.Text);
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

client.DefaultRequestHeaders.Add("User-Agent", "Xbim stats");

// Create the HttpContent for the form to be posted.
// var requestContent = new ht.FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("text", "This is a block of text"), });
foreach (var project in projects)
{
await GetPRStats(stats, client, project);
await GetIssueStats(stats, client, project);
await GetCommentStats(stats, client, project);
}
var fileName = $"stats.csv";
File.Delete(fileName);
using (var f = File.CreateText(fileName))
{
foreach (var stat in stats)
{
f.WriteLine($"{stat.date.Year}, {stat.date.Month}, \"{stat.login}\", \"{stat.type}\", \"{stat.project}\"");
}
}
}

private static async Task GetPRStats(List<stat> stats, ht.HttpClient client, string project)
{
var complete = false;
var url = $"https://api.github.com/repos/xBimTeam/{project}/pulls";
int iPage = 1;
while (!complete)
{
// Get the response.
var t = url + "?page=" + iPage + "&per_page=30&state=all";
Debug.WriteLine(t);
ht.HttpResponseMessage response = await client.GetAsync(t);
// Get the response content.
ht.HttpContent responseContent = response.Content;

// Get the stream of the content.
using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync()))
{
// Write the output.
var content = await reader.ReadToEndAsync();
var items = JArray.Parse(content);
// JArray comments = (JArray)data["channel"]["item"][0]["category"];
foreach (var item in items)
{
var user = item["user"]["login"].ToString();
var created = item["created_at"].ToString();
DateTime createdDate = DateTime.Parse(created);

var s = new stat()
{
login = user,
date = createdDate,
project = project,
type = "PR"
};
stats.Add(s);
}
iPage++;
complete = (items.Count < 30);
}
}
}

private static async Task GetIssueStats(List<stat> stats, ht.HttpClient client, string project)
{
var complete = false;
var url = $"https://api.github.com/repos/xBimTeam/{project}/issues";
int iPage = 1;
while (!complete)
{
// Get the response.
var t = url + "?page=" + iPage + "&per_page=30&state=all";
Debug.WriteLine(t);
ht.HttpResponseMessage response = await client.GetAsync(t);
// Get the response content.
ht.HttpContent responseContent = response.Content;

// Get the stream of the content.
using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync()))
{
// Write the output.
var content = await reader.ReadToEndAsync();
var items = JArray.Parse(content);
// JArray comments = (JArray)data["channel"]["item"][0]["category"];
foreach (var item in items)
{
var user = item["user"]["login"].ToString();
var created = item["created_at"].ToString();
DateTime createdDate = DateTime.Parse(created);

var s = new stat()
{
login = user,
date = createdDate,
project = project,
type = "Issue"
};
stats.Add(s);
}
iPage++;
complete = (items.Count < 30);
}
}
}

private static async Task GetCommentStats(List<stat> stats, ht.HttpClient client, string project)
{
var complete = false;
var url = $"https://api.github.com/repos/xBimTeam/{project}/issues/comments";
int iPage = 1;
while (!complete)
{
// Get the response.
var t = url + "?page=" + iPage;
Debug.WriteLine(t);
ht.HttpResponseMessage response = await client.GetAsync(t);
// Get the response content.
ht.HttpContent responseContent = response.Content;

// Get the stream of the content.
using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync()))
{
// Write the output.
var content = await reader.ReadToEndAsync();
var items = JArray.Parse(content);
// JArray comments = (JArray)data["channel"]["item"][0]["category"];
foreach (var item in items)
{
var user = item["user"]["login"].ToString();
var created = item["created_at"].ToString();
DateTime createdDate = DateTime.Parse(created);

var s = new stat()
{
login = user,
date = createdDate,
project = project,
type = "Comment"
};
stats.Add(s);
}
iPage++;
complete = (items.Count < 30);
}
}
}

private class stat
{
public string login { get; set; }
public DateTime date { get; set; }
public string project { get; set; }
public string type { get; set; }

}

private void CommunityStats(object sender, RoutedEventArgs e)
{
CommunityStatsAsync();
}
}
}
Binary file modified map.dwg
Binary file not shown.

0 comments on commit 246e244

Please sign in to comment.