-
Notifications
You must be signed in to change notification settings - Fork 824
Expand file tree
/
Copy pathSQLAzureServer.AzureResourceHistory.cs
More file actions
77 lines (69 loc) · 3.2 KB
/
SQLAzureServer.AzureResourceHistory.cs
File metadata and controls
77 lines (69 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.Collections.Generic;
using System.Linq;
using Opserver.Data.Dashboard;
namespace Opserver.Data.SQL
{
public partial class SQLInstance
{
private Cache<List<AzureResourceEvent>> _azureResourceHistory;
public Cache<List<AzureResourceEvent>> AzureResourceHistory =>
_azureResourceHistory ??= GetSqlCache(nameof(AzureResourceHistory), async conn =>
{
var sql = GetFetchSQL<AzureResourceEvent>();
var result = await conn.QueryAsync<AzureResourceEvent>(sql);
var lastResult = result.Count > 0 ? result.Last() : null;
CurrentDTUPercent = lastResult?.AvgDTUPercent;
CurrentDTULimit = lastResult?.DTULimit;
return result;
});
public double? CurrentDTUPercent { get; set; }
public int? CurrentDTULimit { get; set; }
public class AzureResourceEvent : ISQLVersioned, IGraphPoint
{
Version IMinVersioned.MinVersion => SQLServerVersions.SQL2012.RTM;
SQLServerEditions ISQLVersioned.SupportedEditions => SQLServerEditions.Azure;
private long? _dateEpoch;
public long DateEpoch => _dateEpoch ??= EventTime.ToEpochTime();
public DateTime EventTime { get; internal set; }
public double AvgDTUPercent { get; internal set; }
public double AvgCPUPercent { get; internal set; }
public double AvgDataIOPercent { get; internal set; }
public double AvgLogWritePercent { get; internal set; }
public double AvgMemoryPercent { get; internal set; }
public double XTPStoragePercent { get; internal set; }
public double MaxWorkerPercent { get; internal set; }
public double MaxSessionPercent { get; internal set; }
public double AvgInstanceCPUPercent { get; internal set; }
public double AvgInstanceMemoryPercent { get; internal set; }
public double AvgLoginRatePercent { get; internal set; }
public double CPULimit { get; internal set; }
public int DTULimit { get; internal set; }
public ReplicaRoleType ReplicaRole { get; internal set; }
public enum ReplicaRoleType
{
Primary = 0,
ReadOnly = 1,
Forwarder = 2,
}
public string GetFetchSQL(in SQLServerEngine e) => @"
Select end_time AS EventTime,
(Select Max(v) From (Values (avg_cpu_percent), (avg_data_io_percent), (avg_log_write_percent)) As value(v)) As AvgDTUPercent,
avg_cpu_percent AvgCPUPercent,
avg_data_io_percent AvgDataIOPercent,
avg_log_write_percent AvgLogWritePercent,
avg_memory_usage_percent AvgMemoryPercent,
xtp_storage_percent XTPStoragePercent,
max_worker_percent MaxWorkerPercent,
max_session_percent MaxSessionPercent,
avg_instance_cpu_percent AvgInstanceCPUPercent,
avg_instance_memory_percent AvgInstanceMemoryPercent,
avg_login_rate_percent AvgLoginRatePercent,
cpu_limit CPULimit,
dtu_limit DTULimit,
replica_role ReplicaRole
From sys.dm_db_resource_stats
Cross Join sys.dm_os_sys_info osi;";
}
}
}