chore: deploy initial linqpad queries
This commit is contained in:
@@ -0,0 +1,220 @@
|
||||
<Query Kind="Program">
|
||||
<Connection>
|
||||
<ID>4f885e7e-d8bb-427c-a54e-8e3e1c3137a7</ID>
|
||||
<Persist>true</Persist>
|
||||
<Server>IOAK-SQL-LOG-01.sdt.local</Server>
|
||||
<Database>jazz log prod</Database>
|
||||
<ShowServer>true</ShowServer>
|
||||
</Connection>
|
||||
<Reference><ProgramFilesX64>\Microsoft SDKs\Azure\.NET SDK\v2.9\bin\plugins\Diagnostics\Newtonsoft.Json.dll</Reference>
|
||||
<NuGetReference>Amazon.Lambda.S3Events</NuGetReference>
|
||||
<NuGetReference>AWSSDK.Core</NuGetReference>
|
||||
<NuGetReference>AWSSDK.S3</NuGetReference>
|
||||
<Namespace>Amazon</Namespace>
|
||||
<Namespace>Amazon.Auth.AccessControlPolicy</Namespace>
|
||||
<Namespace>Amazon.Auth.AccessControlPolicy.ActionIdentifiers</Namespace>
|
||||
<Namespace>Amazon.Internal</Namespace>
|
||||
<Namespace>Amazon.Lambda.S3Events</Namespace>
|
||||
<Namespace>Amazon.MissingTypes</Namespace>
|
||||
<Namespace>Amazon.Runtime</Namespace>
|
||||
<Namespace>Amazon.Runtime.CredentialManagement</Namespace>
|
||||
<Namespace>Amazon.Runtime.CredentialManagement.Internal</Namespace>
|
||||
<Namespace>Amazon.Runtime.EventStreams</Namespace>
|
||||
<Namespace>Amazon.Runtime.EventStreams.Internal</Namespace>
|
||||
<Namespace>Amazon.Runtime.Internal</Namespace>
|
||||
<Namespace>Amazon.Runtime.Internal.Auth</Namespace>
|
||||
<Namespace>Amazon.Runtime.Internal.Settings</Namespace>
|
||||
<Namespace>Amazon.Runtime.Internal.Transform</Namespace>
|
||||
<Namespace>Amazon.Runtime.Internal.Util</Namespace>
|
||||
<Namespace>Amazon.Runtime.SharedInterfaces</Namespace>
|
||||
<Namespace>Amazon.Runtime.SharedInterfaces.Internal</Namespace>
|
||||
<Namespace>Amazon.S3</Namespace>
|
||||
<Namespace>Amazon.S3.Encryption</Namespace>
|
||||
<Namespace>Amazon.S3.Encryption.Internal</Namespace>
|
||||
<Namespace>Amazon.S3.Internal</Namespace>
|
||||
<Namespace>Amazon.S3.IO</Namespace>
|
||||
<Namespace>Amazon.S3.Model</Namespace>
|
||||
<Namespace>Amazon.S3.Model.Internal.MarshallTransformations</Namespace>
|
||||
<Namespace>Amazon.S3.Transfer</Namespace>
|
||||
<Namespace>Amazon.S3.Util</Namespace>
|
||||
<Namespace>Amazon.Util</Namespace>
|
||||
<Namespace>Amazon.Util.Internal</Namespace>
|
||||
<Namespace>Amazon.Util.Internal.PlatformServices</Namespace>
|
||||
<Namespace>Newtonsoft.Json</Namespace>
|
||||
<Namespace>Newtonsoft.Json.Converters</Namespace>
|
||||
<Namespace>Newtonsoft.Json.Linq</Namespace>
|
||||
<Namespace>Newtonsoft.Json.Schema</Namespace>
|
||||
<Namespace>Newtonsoft.Json.Serialization</Namespace>
|
||||
<Namespace>System</Namespace>
|
||||
<Namespace>System.Diagnostics</Namespace>
|
||||
<Namespace>System.Diagnostics.Tracing</Namespace>
|
||||
<Namespace>System.IO.Compression</Namespace>
|
||||
<Namespace>ThirdParty.BouncyCastle.Asn1</Namespace>
|
||||
<Namespace>ThirdParty.BouncyCastle.Asn1.Utilities</Namespace>
|
||||
<Namespace>ThirdParty.BouncyCastle.Math</Namespace>
|
||||
<Namespace>ThirdParty.BouncyCastle.OpenSsl</Namespace>
|
||||
<Namespace>ThirdParty.BouncyCastle.Utilities.IO.Pem</Namespace>
|
||||
<Namespace>ThirdParty.Ionic.Zlib</Namespace>
|
||||
<Namespace>ThirdParty.Json.LitJson</Namespace>
|
||||
<Namespace>ThirdParty.MD5</Namespace>
|
||||
</Query>
|
||||
|
||||
public static string PrimaryUrl => "Opportunities.aspx";
|
||||
public static string UrlGroup => "/CCI";
|
||||
public static DateTime cutoff { get; set; } = DateTime.Now.AddDays((((int)DateTime.Now.DayOfWeek) * -1) + 1).Date;
|
||||
|
||||
void Main()
|
||||
{
|
||||
RunTimings();
|
||||
}
|
||||
|
||||
public void RunTimings()
|
||||
{
|
||||
cutoff = DateTime.Now.AddDays(-30);
|
||||
var timings = GetTimings(cutoff)
|
||||
.Where(t => t.Key.Group == 0 && t.Data.Any());
|
||||
|
||||
var outliers = timings.SelectMany(t => t.Data.Where(d => d.ClientTimeData / 1000.0d > 4.0d));
|
||||
outliers.Dump(nameof(outliers));
|
||||
|
||||
timings
|
||||
.OrderByDescending(t => t.Key.ClientTimeMax > 4 ? t.Key.ClientTimeMax : 0)
|
||||
.ThenBy(t => t.Key.Group)
|
||||
.ThenBy(t => t.Key.Url.Contains(PrimaryUrl) ? "!" : t.Key.Url)
|
||||
.ThenBy(t => t.Key.Application)
|
||||
.ThenByDescending(t => t.Key.Date)
|
||||
.ThenBy(t => t.Key.Browser.StartsWith("IE") ? 0 : 1)
|
||||
.Dump();
|
||||
}
|
||||
|
||||
public IEnumerable<MetricData> GetTimings(DateTime cutoff)
|
||||
{
|
||||
return from log in Archive_PageLogs
|
||||
where (log.Url.StartsWith(UrlGroup))
|
||||
&& log.DateTimeStamp > cutoff
|
||||
group log by new { Group = (log.UserName.StartsWith("sdt\\") ? 1 : 0), log.Url, log.Browser, Date = log.DateTimeStamp.Value.Date, log.Application } into grp
|
||||
//join dbs in ViewActiveDatabases on grp.FirstOrDefault().DatabaseGuid equals dbs.DatabaseGUID
|
||||
orderby grp.Key.Group, (grp.FirstOrDefault().ClientTime / 1000) descending, grp.Key.Date descending
|
||||
select new MetricData
|
||||
{
|
||||
Key = new MetricKey
|
||||
{
|
||||
Application = grp.Key.Application,
|
||||
Group = grp.Key.Group,
|
||||
Url = grp.Key.Url,
|
||||
Browser = grp.Key.Browser,
|
||||
Date = grp.Key.Date,
|
||||
ClientTimeAvg = grp.ToList().Average(g => (g.ClientTime / 1000.0d)) ?? 0.0d,
|
||||
ClientTimeMin = grp.ToList().Min(g1 => (g1.ClientTime / 1000.0d)) ?? 0.0d,
|
||||
ClientTimeMax = grp.ToList().Max(g1 => (g1.ClientTime / 1000.0d)) ?? 0.0d,
|
||||
Count = grp.ToList().Count
|
||||
},
|
||||
Data = grp
|
||||
.Select(g => new Metric(g.DatabaseGuid.Value, ViewActiveDatabases)
|
||||
{
|
||||
UrlParams = g.UrlParams,
|
||||
UserName = g.UserName,
|
||||
WebServer = g.WebServer,
|
||||
ServerTimeData = g.ServerTime ?? 0,
|
||||
ClientTimeData = g.ClientTime ?? 0,
|
||||
DatabaseName = g.DatabaseName,
|
||||
ClientTime = g.ClientTime ?? 0 / 1000.0d,
|
||||
ClientTimeAvg = grp.ToList().Average(g1 => g1.ClientTime ?? 0.0d / 1000.0d),
|
||||
ClientTimeMin = grp.ToList().Min(g1 => g1.ClientTime ?? 0.0d / 1000.0d),
|
||||
ClientTimeMax = grp.ToList().Max(g1 => g1.ClientTime ?? 0.0d / 1000.0d)
|
||||
}).Where(x => (x.ClientTimeData / 1000.0d) > x.ClientTimeAvg || ((x.ClientTimeData / 1000.0d) > 4.0d))
|
||||
};
|
||||
}
|
||||
|
||||
// Define other methods and classes here
|
||||
|
||||
public class Metric
|
||||
{
|
||||
public double ClientTime { get; set; }
|
||||
public double ClientTimeData { get; set; }
|
||||
public double ClientTimeAvg { get; set; }
|
||||
public double ClientTimeMin { get; set; }
|
||||
public double ClientTimeMax { get; set; }
|
||||
public string WebServer { get; set; }
|
||||
public string PhysicalName { get; set; }
|
||||
public Guid DatabaseGuid { get; set; }
|
||||
public string DatabaseName { get; set; }
|
||||
public string UserName { get; set; }
|
||||
public string UrlParams { get; set; }
|
||||
public int ServerTimeData { get; set; }
|
||||
public string OrgPin { get; set; }
|
||||
|
||||
public Metric()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public Metric(Guid databaseGuid, Table<ViewActiveDatabases> activeDatabases)
|
||||
{
|
||||
DatabaseGuid = databaseGuid;
|
||||
var activeDatabase = activeDatabases.SingleOrDefault(vad => vad.DatabaseGUID == databaseGuid);
|
||||
PhysicalName = activeDatabase?.PhysicalName ?? string.Empty;
|
||||
OrgPin = activeDatabase?.OrgPin ?? string.Empty;
|
||||
}
|
||||
|
||||
object ToDump() => new
|
||||
{
|
||||
ClientTimeMax = new XElement("LINQPad.HTML",
|
||||
new XElement("div",
|
||||
new XAttribute("align", "right"),
|
||||
new XAttribute("style", $"background-color:{(ClientTimeMax > 4.0d ? "red" : (ClientTimeAvg < (ClientTimeData / 1000.0d)) ? "violet" : "white")};"),
|
||||
$"{ClientTimeMax:n}".PadLeft(10))),
|
||||
ClientTimeAvg,
|
||||
ClientTimeMin,
|
||||
WebServer,
|
||||
OrgPin,
|
||||
DatabaseName,
|
||||
PhysicalName,
|
||||
UserName,
|
||||
UrlParams,
|
||||
ServerTime = $"{ServerTimeData:n0}".PadLeft(10)
|
||||
};
|
||||
}
|
||||
|
||||
public class MetricKey
|
||||
{
|
||||
public string Application { get; set; }
|
||||
public int Group { get; set; }
|
||||
public string Browser { get; set; }
|
||||
public string Url { get; set; }
|
||||
//public int UrlLength { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public double ClientTimeAvg { get; set; }
|
||||
public double ClientTimeMin { get; set; }
|
||||
public double ClientTimeMax { get; set; }
|
||||
public int Count { get; set; }
|
||||
|
||||
object ToDump() => new
|
||||
{
|
||||
Application,
|
||||
GroupName = Group == 0 ? "Clients" : "Strata",
|
||||
Browser,
|
||||
URL = Url, //.PadRight(UrlLength),
|
||||
OnDate = Date.ToShortDateString(),
|
||||
Avg_ClientTime = $"{ClientTimeAvg:N2}",
|
||||
Min_ClientTime = $"{ClientTimeMin:N2}",
|
||||
Max_ClientTime = $"{ClientTimeMax:N2}",
|
||||
Count
|
||||
};
|
||||
}
|
||||
|
||||
public class MetricData
|
||||
{
|
||||
public MetricKey Key { get; set; }
|
||||
public IEnumerable<Metric> Data { get; set; }
|
||||
|
||||
object ToDump() => new
|
||||
{
|
||||
Group = Key,
|
||||
Statistics = Data
|
||||
.OrderBy(d => d.WebServer)
|
||||
.ThenBy(d => d.DatabaseName)
|
||||
.ThenBy(d => d.UserName)
|
||||
.ThenBy(d => d.ClientTimeData)
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user