From 1890ebac169119832533f77cf88baf0b4d457b57 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Fri, 21 Apr 2017 16:26:59 +1000 Subject: [PATCH 1/2] Update to match the Seq 4.0 API --- src/Seq.Api/Api/Client/SeqApiClient.cs | 8 ++- src/Seq.Api/Api/Model/Apps/AppEntity.cs | 7 ++- src/Seq.Api/Api/Model/Apps/AppPackagePart.cs | 1 + .../Data/QueryExecutionStatisticsPart.cs | 2 +- src/Seq.Api/Api/Model/Data/QueryResultPart.cs | 2 +- src/Seq.Api/Api/Model/Data/TimeSlicePart.cs | 2 +- src/Seq.Api/Api/Model/Data/TimeseriesPart.cs | 2 +- .../Model/Diagnostics/ServerMetricsEntity.cs | 8 +++ .../Model/Events/MessageTemplateTokenPart.cs | 3 ++ .../Model/Expressions/SqlExpressionPart.cs | 7 +++ src/Seq.Api/Api/Model/Inputs/ApiKeyEntity.cs | 2 + .../Api/Model/License/LicenseEntity.cs | 2 +- src/Seq.Api/Api/Model/Monitoring/AlertPart.cs | 16 ++++++ src/Seq.Api/Api/Model/Monitoring/ChartPart.cs | 15 ++++++ .../Api/Model/Monitoring/ChartQueryPart.cs | 15 ++++++ .../Api/Model/Monitoring/DashboardEntity.cs | 15 ++++++ .../Monitoring/MeasurementDisplayPalette.cs | 10 ++++ .../Monitoring/MeasurementDisplayStylePart.cs | 11 +++++ .../Monitoring/MeasurementDisplayType.cs | 9 ++++ .../Api/Model/Monitoring/MeasurementPart.cs | 8 +++ .../Api/Model/Permalinks/PermalinkEntity.cs | 16 ++++++ src/Seq.Api/Api/Model/Pins/PinEntity.cs | 26 ---------- .../Api/Model/Users/CredentialsPart.cs | 1 + src/Seq.Api/Api/Model/Users/UserEntity.cs | 7 +-- .../Api/Model/Watches/DataPointPart.cs | 14 ------ .../Api/Model/Watches/DataRangePart.cs | 14 ------ .../Api/Model/Watches/TimeSliceDuration.cs | 14 ------ src/Seq.Api/Api/Model/Watches/WatchEntity.cs | 17 ------- .../ResourceGroups/DashboardsResourceGroup.cs | 46 +++++++++++++++++ .../Api/ResourceGroups/DataResourceGroup.cs | 2 +- ...rceGroup.cs => PermalinksResourceGroup.cs} | 28 +++++------ .../ResourceGroups/SqlQueriesResourceGroup.cs | 5 +- .../ResourceGroups/WatchesResourceGroup.cs | 49 ------------------- src/Seq.Api/Api/SeqConnection.cs | 8 +-- src/Seq.Api/Seq.Api.csproj | 1 + 35 files changed, 222 insertions(+), 171 deletions(-) create mode 100644 src/Seq.Api/Api/Model/Expressions/SqlExpressionPart.cs create mode 100644 src/Seq.Api/Api/Model/Monitoring/AlertPart.cs create mode 100644 src/Seq.Api/Api/Model/Monitoring/ChartPart.cs create mode 100644 src/Seq.Api/Api/Model/Monitoring/ChartQueryPart.cs create mode 100644 src/Seq.Api/Api/Model/Monitoring/DashboardEntity.cs create mode 100644 src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayPalette.cs create mode 100644 src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayStylePart.cs create mode 100644 src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayType.cs create mode 100644 src/Seq.Api/Api/Model/Monitoring/MeasurementPart.cs create mode 100644 src/Seq.Api/Api/Model/Permalinks/PermalinkEntity.cs delete mode 100644 src/Seq.Api/Api/Model/Pins/PinEntity.cs delete mode 100644 src/Seq.Api/Api/Model/Watches/DataPointPart.cs delete mode 100644 src/Seq.Api/Api/Model/Watches/DataRangePart.cs delete mode 100644 src/Seq.Api/Api/Model/Watches/TimeSliceDuration.cs delete mode 100644 src/Seq.Api/Api/Model/Watches/WatchEntity.cs create mode 100644 src/Seq.Api/Api/ResourceGroups/DashboardsResourceGroup.cs rename src/Seq.Api/Api/ResourceGroups/{PinsResourceGroup.cs => PermalinksResourceGroup.cs} (55%) delete mode 100644 src/Seq.Api/Api/ResourceGroups/WatchesResourceGroup.cs diff --git a/src/Seq.Api/Api/Client/SeqApiClient.cs b/src/Seq.Api/Api/Client/SeqApiClient.cs index 08da47c..e118117 100644 --- a/src/Seq.Api/Api/Client/SeqApiClient.cs +++ b/src/Seq.Api/Api/Client/SeqApiClient.cs @@ -26,7 +26,7 @@ public class SeqApiClient : IDisposable // Future versions of Seq may not completely support v1 features, however // providing this as an Accept header will ensure what compatibility is available // can be utilised. - const string SeqApiV3MediaType = "application/vnd.continuousit.seq.v3+json"; + const string SeqApiV4MediaType = "application/vnd.continuousit.seq.v4+json"; readonly HttpClient _httpClient; readonly CookieContainer _cookies = new CookieContainer(); @@ -38,9 +38,7 @@ public class SeqApiClient : IDisposable public SeqApiClient(string serverUrl, string apiKey = null) { - if (serverUrl == null) throw new ArgumentNullException(nameof(serverUrl)); - - ServerUrl = serverUrl; + ServerUrl = serverUrl ?? throw new ArgumentNullException(nameof(serverUrl)); if (!string.IsNullOrEmpty(apiKey)) _apiKey = apiKey; @@ -172,7 +170,7 @@ async Task HttpSendAsync(HttpRequestMessage request) if (_apiKey != null) request.Headers.Add("X-Seq-ApiKey", _apiKey); - request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(SeqApiV3MediaType)); + request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(SeqApiV4MediaType)); var response = await _httpClient.SendAsync(request).ConfigureAwait(false); var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); diff --git a/src/Seq.Api/Api/Model/Apps/AppEntity.cs b/src/Seq.Api/Api/Model/Apps/AppEntity.cs index d47713d..e30861c 100644 --- a/src/Seq.Api/Api/Model/Apps/AppEntity.cs +++ b/src/Seq.Api/Api/Model/Apps/AppEntity.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; namespace Seq.Api.Model.Apps { @@ -7,16 +8,20 @@ public class AppEntity : Entity public AppEntity() { Name = "New App"; +#pragma warning disable CS0618 // Type or member is obsolete AssemblyNames = new List(); AvailableSettings = new List(); +#pragma warning restore CS0618 // Type or member is obsolete } public string Name { get; set; } public string Description { get; set; } + [Obsolete("Packages must be installed via a feed.")] public string MainReactorTypeName { get; set; } + [Obsolete("Packages must be installed via a feed.")] public List AssemblyNames { get; set; } public List AvailableSettings { get; set; } diff --git a/src/Seq.Api/Api/Model/Apps/AppPackagePart.cs b/src/Seq.Api/Api/Model/Apps/AppPackagePart.cs index 2a6b209..cb99313 100644 --- a/src/Seq.Api/Api/Model/Apps/AppPackagePart.cs +++ b/src/Seq.Api/Api/Model/Apps/AppPackagePart.cs @@ -8,5 +8,6 @@ public class AppPackagePart public string Authors { get; set; } public string IconUrl { get; set; } public string LicenseUrl { get; set; } + public bool UpdateAvailable { get; set; } } } diff --git a/src/Seq.Api/Api/Model/Data/QueryExecutionStatisticsPart.cs b/src/Seq.Api/Api/Model/Data/QueryExecutionStatisticsPart.cs index 682a63b..c0c030b 100644 --- a/src/Seq.Api/Api/Model/Data/QueryExecutionStatisticsPart.cs +++ b/src/Seq.Api/Api/Model/Data/QueryExecutionStatisticsPart.cs @@ -1,4 +1,4 @@ -namespace Seq.Api.Data +namespace Seq.Api.Model.Data { public class QueryExecutionStatisticsPart { diff --git a/src/Seq.Api/Api/Model/Data/QueryResultPart.cs b/src/Seq.Api/Api/Model/Data/QueryResultPart.cs index 93f4fca..3a61136 100644 --- a/src/Seq.Api/Api/Model/Data/QueryResultPart.cs +++ b/src/Seq.Api/Api/Model/Data/QueryResultPart.cs @@ -1,6 +1,6 @@ using Newtonsoft.Json; -namespace Seq.Api.Data +namespace Seq.Api.Model.Data { public class QueryResultPart { diff --git a/src/Seq.Api/Api/Model/Data/TimeSlicePart.cs b/src/Seq.Api/Api/Model/Data/TimeSlicePart.cs index e3143f4..057ef32 100644 --- a/src/Seq.Api/Api/Model/Data/TimeSlicePart.cs +++ b/src/Seq.Api/Api/Model/Data/TimeSlicePart.cs @@ -1,4 +1,4 @@ -namespace Seq.Api.Data +namespace Seq.Api.Model.Data { public class TimeSlicePart { diff --git a/src/Seq.Api/Api/Model/Data/TimeseriesPart.cs b/src/Seq.Api/Api/Model/Data/TimeseriesPart.cs index f6497f5..4ed8bf3 100644 --- a/src/Seq.Api/Api/Model/Data/TimeseriesPart.cs +++ b/src/Seq.Api/Api/Model/Data/TimeseriesPart.cs @@ -1,4 +1,4 @@ -namespace Seq.Api.Data +namespace Seq.Api.Model.Data { public class TimeseriesPart { diff --git a/src/Seq.Api/Api/Model/Diagnostics/ServerMetricsEntity.cs b/src/Seq.Api/Api/Model/Diagnostics/ServerMetricsEntity.cs index fccfbe7..49de55f 100644 --- a/src/Seq.Api/Api/Model/Diagnostics/ServerMetricsEntity.cs +++ b/src/Seq.Api/Api/Model/Diagnostics/ServerMetricsEntity.cs @@ -19,6 +19,7 @@ public ServerMetricsEntity() public int EndpointArrivalsPerMinute { get; set; } public int EndpointInfluxPerMinute { get; set; } + public long EndpointIngestedBytesPerMinute { get; set; } public int EndpointInvalidPayloadsPerMinute { get; set; } public int EndpointUnauthorizedPayloadsPerMinute { get; set; } @@ -31,5 +32,12 @@ public ServerMetricsEntity() public double SystemMemoryUtilization { get; set; } public List RunningTasks { get; set; } + + public int QueriesPerMinute { get; set; } + public int QueryCacheTimeSliceHitsPerMinute { get; set; } + public int QueryCacheInvalidationsPerMinute { get; set; } + + public int DocumentStoreActiveSessions { get; set; } + public int DocumentStoreActiveTransactions { get; set; } } } diff --git a/src/Seq.Api/Api/Model/Events/MessageTemplateTokenPart.cs b/src/Seq.Api/Api/Model/Events/MessageTemplateTokenPart.cs index 7061ad2..9fc19fc 100644 --- a/src/Seq.Api/Api/Model/Events/MessageTemplateTokenPart.cs +++ b/src/Seq.Api/Api/Model/Events/MessageTemplateTokenPart.cs @@ -10,6 +10,9 @@ public class MessageTemplateTokenPart [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public string PropertyName { get; set; } + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public string RawText { get; set; } + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public string FormattedValue { get; set; } } diff --git a/src/Seq.Api/Api/Model/Expressions/SqlExpressionPart.cs b/src/Seq.Api/Api/Model/Expressions/SqlExpressionPart.cs new file mode 100644 index 0000000..21ac587 --- /dev/null +++ b/src/Seq.Api/Api/Model/Expressions/SqlExpressionPart.cs @@ -0,0 +1,7 @@ +namespace Seq.Api.Model.Expressions +{ + public class SqlExpressionPart + { + public string Expression { get; set; } + } +} \ No newline at end of file diff --git a/src/Seq.Api/Api/Model/Inputs/ApiKeyEntity.cs b/src/Seq.Api/Api/Model/Inputs/ApiKeyEntity.cs index eb8c764..4032d9e 100644 --- a/src/Seq.Api/Api/Model/Inputs/ApiKeyEntity.cs +++ b/src/Seq.Api/Api/Model/Inputs/ApiKeyEntity.cs @@ -19,8 +19,10 @@ public ApiKeyEntity() public SignalFilterPart InputFilter { get; set; } public bool CanActAsPrincipal { get; set; } public LogEventLevel? MinimumLevel { get; set; } + public bool UseServerTimestamps { get; set; } public int InfluxPerMinute { get; set; } public int ArrivalsPerMinute { get; set; } public ApiKeyMetricsPart Metrics { get; set; } + public bool IsDefault { get; set; } } } diff --git a/src/Seq.Api/Api/Model/License/LicenseEntity.cs b/src/Seq.Api/Api/Model/License/LicenseEntity.cs index 95765df..f9a30f8 100644 --- a/src/Seq.Api/Api/Model/License/LicenseEntity.cs +++ b/src/Seq.Api/Api/Model/License/LicenseEntity.cs @@ -1,6 +1,6 @@ namespace Seq.Api.Model.License { - public class LicenseEntity : Seq.Api.Model.Entity + public class LicenseEntity : Entity { public string LicenseText { get; set; } public bool IsValid { get; set; } diff --git a/src/Seq.Api/Api/Model/Monitoring/AlertPart.cs b/src/Seq.Api/Api/Model/Monitoring/AlertPart.cs new file mode 100644 index 0000000..36cd15d --- /dev/null +++ b/src/Seq.Api/Api/Model/Monitoring/AlertPart.cs @@ -0,0 +1,16 @@ +using Seq.Api.Model.LogEvents; +using System; + +namespace Seq.Api.Model.Monitoring +{ + public class AlertPart + { + public string Id { get; set; } + public string Condition { get; set; } + public TimeSpan MeasurementWindow { get; set; } + public TimeSpan StabilizationWindow { get; set; } = TimeSpan.FromSeconds(30); + public TimeSpan SuppressionTime { get; set; } + public LogEventLevel Level { get; set; } = LogEventLevel.Warning; + public string NotificationAppInstanceId { get; set; } + } +} diff --git a/src/Seq.Api/Api/Model/Monitoring/ChartPart.cs b/src/Seq.Api/Api/Model/Monitoring/ChartPart.cs new file mode 100644 index 0000000..3bc4fb7 --- /dev/null +++ b/src/Seq.Api/Api/Model/Monitoring/ChartPart.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace Seq.Api.Model.Monitoring +{ + public class ChartPart + { + public string Id { get; set; } + + public string Title { get; set; } + + public List SignalIds { get; set; } = new List(); + + public List Queries { get; set; } = new List(); + } +} diff --git a/src/Seq.Api/Api/Model/Monitoring/ChartQueryPart.cs b/src/Seq.Api/Api/Model/Monitoring/ChartQueryPart.cs new file mode 100644 index 0000000..33ca75c --- /dev/null +++ b/src/Seq.Api/Api/Model/Monitoring/ChartQueryPart.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace Seq.Api.Model.Monitoring +{ + public class ChartQueryPart + { + public string Id { get; set; } + public List Measurements { get; set; } = new List(); + public string Where { get; set; } + public List SignalIds { get; set; } = new List(); + public List GroupBy { get; set; } = new List(); + public MeasurementDisplayStylePart DisplayStyle = new MeasurementDisplayStylePart(); + public List Alerts { get; set; } = new List(); + } +} diff --git a/src/Seq.Api/Api/Model/Monitoring/DashboardEntity.cs b/src/Seq.Api/Api/Model/Monitoring/DashboardEntity.cs new file mode 100644 index 0000000..7158a11 --- /dev/null +++ b/src/Seq.Api/Api/Model/Monitoring/DashboardEntity.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace Seq.Api.Model.Monitoring +{ + public class DashboardEntity : Entity + { + public string OwnerId { get; set; } + + public string Title { get; set; } + + public List SignalIds { get; set; } = new List(); + + public List Charts { get; set; } = new List(); + } +} diff --git a/src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayPalette.cs b/src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayPalette.cs new file mode 100644 index 0000000..97bd1b4 --- /dev/null +++ b/src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayPalette.cs @@ -0,0 +1,10 @@ +namespace Seq.Api.Model.Monitoring +{ + public enum MeasurementDisplayPalette + { + Default, + Reds, + Greens, + Blues + } +} diff --git a/src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayStylePart.cs b/src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayStylePart.cs new file mode 100644 index 0000000..4c47411 --- /dev/null +++ b/src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayStylePart.cs @@ -0,0 +1,11 @@ +namespace Seq.Api.Model.Monitoring +{ + public class MeasurementDisplayStylePart + { + public MeasurementDisplayType Type { get; set; } = MeasurementDisplayType.Line; + public bool LineFillToZeroY { get; set; } + public bool LineShowMarkers { get; set; } = true; + public bool BarOverlaySum { get; set; } + public MeasurementDisplayPalette Palette { get; set; } = MeasurementDisplayPalette.Default; + } +} diff --git a/src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayType.cs b/src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayType.cs new file mode 100644 index 0000000..f92f0f7 --- /dev/null +++ b/src/Seq.Api/Api/Model/Monitoring/MeasurementDisplayType.cs @@ -0,0 +1,9 @@ +namespace Seq.Api.Model.Monitoring +{ + public enum MeasurementDisplayType + { + Line, + Bar, + Point + } +} diff --git a/src/Seq.Api/Api/Model/Monitoring/MeasurementPart.cs b/src/Seq.Api/Api/Model/Monitoring/MeasurementPart.cs new file mode 100644 index 0000000..c6dfcf6 --- /dev/null +++ b/src/Seq.Api/Api/Model/Monitoring/MeasurementPart.cs @@ -0,0 +1,8 @@ +namespace Seq.Api.Model.Monitoring +{ + public class MeasurementPart + { + public string Value { get; set; } + public string Label { get; set; } + } +} diff --git a/src/Seq.Api/Api/Model/Permalinks/PermalinkEntity.cs b/src/Seq.Api/Api/Model/Permalinks/PermalinkEntity.cs new file mode 100644 index 0000000..74ac2c9 --- /dev/null +++ b/src/Seq.Api/Api/Model/Permalinks/PermalinkEntity.cs @@ -0,0 +1,16 @@ +using System; +using Newtonsoft.Json; +using Seq.Api.Model.Events; + +namespace Seq.Api.Model.Permalinks +{ + public class PermalinkEntity : Entity + { + public string OwnerId { get; set; } + public string EventId { get; set; } + public DateTime CreatedUtc { get; set; } + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + public EventEntity Event { get; set; } + } +} diff --git a/src/Seq.Api/Api/Model/Pins/PinEntity.cs b/src/Seq.Api/Api/Model/Pins/PinEntity.cs deleted file mode 100644 index fe97857..0000000 --- a/src/Seq.Api/Api/Model/Pins/PinEntity.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using Newtonsoft.Json; -using Seq.Api.Model.Events; -using Seq.Api.Model.Users; - -namespace Seq.Api.Model.Pins -{ - public class PinEntity : Seq.Api.Model.Entity - { - public string OwnerId { get; set; } - public string EventId { get; set; } - public DateTime CreatedUtc { get; set; } - public string PinType { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] - public string AssignedByUserId { get; set; } - - public string Notes { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] - public EventEntity Event { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] - public UserEntity AssignedByUser { get; set; } - } -} diff --git a/src/Seq.Api/Api/Model/Users/CredentialsPart.cs b/src/Seq.Api/Api/Model/Users/CredentialsPart.cs index ead4ce7..adc0a7c 100644 --- a/src/Seq.Api/Api/Model/Users/CredentialsPart.cs +++ b/src/Seq.Api/Api/Model/Users/CredentialsPart.cs @@ -4,5 +4,6 @@ public class CredentialsPart { public string Username { get; set; } public string Password { get; set; } + public string NewPassword { get; set; } } } diff --git a/src/Seq.Api/Api/Model/Users/UserEntity.cs b/src/Seq.Api/Api/Model/Users/UserEntity.cs index 7cb80cf..2c186f2 100644 --- a/src/Seq.Api/Api/Model/Users/UserEntity.cs +++ b/src/Seq.Api/Api/Model/Users/UserEntity.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Seq.Api.Model.Signals; namespace Seq.Api.Model.Users @@ -13,8 +12,6 @@ public class UserEntity : Entity public bool IsAdministrator { get; set; } public string NewPassword { get; set; } public SignalFilterPart ViewFilter { get; set; } - - [Obsolete("Use Links.Avatar")] - public string AvatarUrl { get; set; } + public bool MustChangePassword { get; set; } } } diff --git a/src/Seq.Api/Api/Model/Watches/DataPointPart.cs b/src/Seq.Api/Api/Model/Watches/DataPointPart.cs deleted file mode 100644 index 55e2f27..0000000 --- a/src/Seq.Api/Api/Model/Watches/DataPointPart.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using Newtonsoft.Json; - -namespace Seq.Api.Model.Watches -{ - public class DataPointPart - { - public DateTime SliceStartUtc { get; set; } - public long Value { get; set; } - - [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] - public bool Uncached { get; set; } - } -} diff --git a/src/Seq.Api/Api/Model/Watches/DataRangePart.cs b/src/Seq.Api/Api/Model/Watches/DataRangePart.cs deleted file mode 100644 index 30b45ea..0000000 --- a/src/Seq.Api/Api/Model/Watches/DataRangePart.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; - -namespace Seq.Api.Model.Watches -{ - public class DataRangePart - { - public DataRangePart() - { - Points = new List(); - } - - public IList Points { get; set; } - } -} diff --git a/src/Seq.Api/Api/Model/Watches/TimeSliceDuration.cs b/src/Seq.Api/Api/Model/Watches/TimeSliceDuration.cs deleted file mode 100644 index 06a4a3e..0000000 --- a/src/Seq.Api/Api/Model/Watches/TimeSliceDuration.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Seq.Api.Model.Watches -{ - public enum TimeSliceDuration - { - None, - Second, - Minute, - Hour, - Day, - Week, - Month, - Year - } -} diff --git a/src/Seq.Api/Api/Model/Watches/WatchEntity.cs b/src/Seq.Api/Api/Model/Watches/WatchEntity.cs deleted file mode 100644 index 256b989..0000000 --- a/src/Seq.Api/Api/Model/Watches/WatchEntity.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using Seq.Api.Model.Signals; - -namespace Seq.Api.Model.Watches -{ - public class WatchEntity : Entity - { - public string OwnerId { get; set; } - public string Description { get; set; } - public SignalFilterPart Filter { get; set; } - public List SignalIds { get; set; } - public long CountSinceReset { get; set; } - public DateTime ResetAtUtc { get; set; } - public string DisplayStyle { get; set; } - } -} diff --git a/src/Seq.Api/Api/ResourceGroups/DashboardsResourceGroup.cs b/src/Seq.Api/Api/ResourceGroups/DashboardsResourceGroup.cs new file mode 100644 index 0000000..f451b91 --- /dev/null +++ b/src/Seq.Api/Api/ResourceGroups/DashboardsResourceGroup.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Seq.Api.Model.Monitoring; + +namespace Seq.Api.ResourceGroups +{ + public class DashboardsResourceGroup : ApiResourceGroup + { + internal DashboardsResourceGroup(ISeqConnection connection) + : base("Dashboards", connection) + { + } + + public async Task FindAsync(string id) + { + if (id == null) throw new ArgumentNullException(nameof(id)); + return await GroupGetAsync("Item", new Dictionary { { "id", id } }).ConfigureAwait(false); + } + + public async Task> ListAsync() + { + return await GroupListAsync("Items").ConfigureAwait(false); + } + + public async Task TemplateAsync() + { + return await GroupGetAsync("Template").ConfigureAwait(false); + } + + public async Task AddAsync(DashboardEntity entity) + { + return await Client.PostAsync(entity, "Create", entity).ConfigureAwait(false); + } + + public async Task RemoveAsync(DashboardEntity entity) + { + await Client.DeleteAsync(entity, "Self", entity).ConfigureAwait(false); + } + + public async Task UpdateAsync(DashboardEntity entity) + { + await Client.PutAsync(entity, "Self", entity).ConfigureAwait(false); + } + } +} \ No newline at end of file diff --git a/src/Seq.Api/Api/ResourceGroups/DataResourceGroup.cs b/src/Seq.Api/Api/ResourceGroups/DataResourceGroup.cs index 01b047d..99d0259 100644 --- a/src/Seq.Api/Api/ResourceGroups/DataResourceGroup.cs +++ b/src/Seq.Api/Api/ResourceGroups/DataResourceGroup.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using Seq.Api.Data; +using Seq.Api.Model.Data; using Seq.Api.Model.Signals; namespace Seq.Api.ResourceGroups diff --git a/src/Seq.Api/Api/ResourceGroups/PinsResourceGroup.cs b/src/Seq.Api/Api/ResourceGroups/PermalinksResourceGroup.cs similarity index 55% rename from src/Seq.Api/Api/ResourceGroups/PinsResourceGroup.cs rename to src/Seq.Api/Api/ResourceGroups/PermalinksResourceGroup.cs index d03f2eb..a98c098 100644 --- a/src/Seq.Api/Api/ResourceGroups/PinsResourceGroup.cs +++ b/src/Seq.Api/Api/ResourceGroups/PermalinksResourceGroup.cs @@ -1,18 +1,18 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using Seq.Api.Model.Pins; +using Seq.Api.Model.Permalinks; namespace Seq.Api.ResourceGroups { - public class PinsResourceGroup : ApiResourceGroup + public class PermalinksResourceGroup : ApiResourceGroup { - internal PinsResourceGroup(ISeqConnection connection) - : base("Pins", connection) + internal PermalinksResourceGroup(ISeqConnection connection) + : base("Permalinks", connection) { } - public async Task FindAsync( + public async Task FindAsync( string id, bool includeEvent = false, bool renderEvent = false, @@ -26,10 +26,10 @@ public async Task FindAsync( {"renderEvent", renderEvent}, {"includeUser", includeUser} }; - return await GroupGetAsync("Item", parameters).ConfigureAwait(false); + return await GroupGetAsync("Item", parameters).ConfigureAwait(false); } - public async Task> ListAsync( + public async Task> ListAsync( bool includeEvent = false, bool renderEvent = false, bool includeUser = false) @@ -41,25 +41,25 @@ public async Task> ListAsync( {"includeUser", includeUser} }; - return await GroupListAsync("Items", parameters).ConfigureAwait(false); + return await GroupListAsync("Items", parameters).ConfigureAwait(false); } - public async Task TemplateAsync() + public async Task TemplateAsync() { - return await GroupGetAsync("Template").ConfigureAwait(false); + return await GroupGetAsync("Template").ConfigureAwait(false); } - public async Task AddAsync(PinEntity entity) + public async Task AddAsync(PermalinkEntity entity) { - return await Client.PostAsync(entity, "Create", entity).ConfigureAwait(false); + return await Client.PostAsync(entity, "Create", entity).ConfigureAwait(false); } - public async Task RemoveAsync(PinEntity entity) + public async Task RemoveAsync(PermalinkEntity entity) { await Client.DeleteAsync(entity, "Self", entity).ConfigureAwait(false); } - public async Task UpdateAsync(PinEntity entity) + public async Task UpdateAsync(PermalinkEntity entity) { await Client.PutAsync(entity, "Self", entity).ConfigureAwait(false); } diff --git a/src/Seq.Api/Api/ResourceGroups/SqlQueriesResourceGroup.cs b/src/Seq.Api/Api/ResourceGroups/SqlQueriesResourceGroup.cs index 3b84725..8dbb597 100644 --- a/src/Seq.Api/Api/ResourceGroups/SqlQueriesResourceGroup.cs +++ b/src/Seq.Api/Api/ResourceGroups/SqlQueriesResourceGroup.cs @@ -18,9 +18,10 @@ public async Task FindAsync(string id) return await GroupGetAsync("Item", new Dictionary { { "id", id } }).ConfigureAwait(false); } - public async Task> ListAsync() + public async Task> ListAsync(string ownerId = null, bool shared = false) { - return await GroupListAsync("Items").ConfigureAwait(false); + var parameters = new Dictionary{{"ownerId", ownerId}, {"shared", shared}}; + return await GroupListAsync("Items", parameters).ConfigureAwait(false); } public async Task TemplateAsync() diff --git a/src/Seq.Api/Api/ResourceGroups/WatchesResourceGroup.cs b/src/Seq.Api/Api/ResourceGroups/WatchesResourceGroup.cs deleted file mode 100644 index 1a93d58..0000000 --- a/src/Seq.Api/Api/ResourceGroups/WatchesResourceGroup.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Seq.Api.Model.Watches; - -namespace Seq.Api.ResourceGroups -{ - public class WatchesResourceGroup : ApiResourceGroup - { - internal WatchesResourceGroup(ISeqConnection connection) - : base("Watches", connection) - { - } - - public async Task FindAsync(string id) - { - if (id == null) throw new ArgumentNullException(nameof(id)); - return await GroupGetAsync("Item", new Dictionary { { "id", id } }).ConfigureAwait(false); - } - - public async Task> ListAsync(string ownerId = null) - { - var parameters = new Dictionary(); - if (ownerId != null) - parameters.Add("ownerId", ownerId); - return await GroupListAsync("Items", parameters).ConfigureAwait(false); - } - - public async Task TemplateAsync() - { - return await GroupGetAsync("Template").ConfigureAwait(false); - } - - public async Task AddAsync(WatchEntity entity) - { - return await Client.PostAsync(entity, "Create", entity).ConfigureAwait(false); - } - - public async Task RemoveAsync(WatchEntity entity) - { - await Client.DeleteAsync(entity, "Self", entity).ConfigureAwait(false); - } - - public async Task UpdateAsync(WatchEntity entity) - { - await Client.PutAsync(entity, "Self", entity).ConfigureAwait(false); - } - } -} \ No newline at end of file diff --git a/src/Seq.Api/Api/SeqConnection.cs b/src/Seq.Api/Api/SeqConnection.cs index f8babb6..8c7c39b 100644 --- a/src/Seq.Api/Api/SeqConnection.cs +++ b/src/Seq.Api/Api/SeqConnection.cs @@ -31,6 +31,8 @@ public SeqConnection(string serverUrl, string apiKey = null) public BackupsResourceGroup Backups => new BackupsResourceGroup(this); + public DashboardsResourceGroup Dashboards => new DashboardsResourceGroup(this); + public DataResourceGroup Data => new DataResourceGroup(this); public DiagnosticsResourceGroup Diagnostics => new DiagnosticsResourceGroup(this); @@ -43,7 +45,7 @@ public SeqConnection(string serverUrl, string apiKey = null) public LicensesResourceGroup Licenses => new LicensesResourceGroup(this); - public PinsResourceGroup Pins => new PinsResourceGroup(this); + public PermalinksResourceGroup Permalinks => new PermalinksResourceGroup(this); public RetentionPoliciesResourceGroup RetentionPolicies => new RetentionPoliciesResourceGroup(this); @@ -55,14 +57,12 @@ public SeqConnection(string serverUrl, string apiKey = null) public UsersResourceGroup Users => new UsersResourceGroup(this); - public WatchesResourceGroup Watches => new WatchesResourceGroup(this); - public async Task LoadResourceGroupAsync(string name) { return await _resourceGroups.GetOrAdd(name, ResourceGroupFactory).ConfigureAwait(false); } - private async Task ResourceGroupFactory(string name) + async Task ResourceGroupFactory(string name) { return await _client.GetAsync(await _root.Value, name + "Resources").ConfigureAwait(false); } diff --git a/src/Seq.Api/Seq.Api.csproj b/src/Seq.Api/Seq.Api.csproj index c92ba8c..e6377d4 100644 --- a/src/Seq.Api/Seq.Api.csproj +++ b/src/Seq.Api/Seq.Api.csproj @@ -23,6 +23,7 @@ false false false + Seq From 025ab08561330d9dc5ddaa8d1779f65df741eb19 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Fri, 21 Apr 2017 16:33:10 +1000 Subject: [PATCH 2/2] Add support for fuzzy-to-SQL --- src/Seq.Api/Api/ResourceGroups/DashboardsResourceGroup.cs | 5 +++-- .../Api/ResourceGroups/ExpressionsResourceGroup.cs | 8 ++++++++ src/Seq.Api/Api/ResourceGroups/SqlQueriesResourceGroup.cs | 5 ++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Seq.Api/Api/ResourceGroups/DashboardsResourceGroup.cs b/src/Seq.Api/Api/ResourceGroups/DashboardsResourceGroup.cs index f451b91..39eee61 100644 --- a/src/Seq.Api/Api/ResourceGroups/DashboardsResourceGroup.cs +++ b/src/Seq.Api/Api/ResourceGroups/DashboardsResourceGroup.cs @@ -18,9 +18,10 @@ public async Task FindAsync(string id) return await GroupGetAsync("Item", new Dictionary { { "id", id } }).ConfigureAwait(false); } - public async Task> ListAsync() + public async Task> ListAsync(string ownerId = null, bool shared = false) { - return await GroupListAsync("Items").ConfigureAwait(false); + var parameters = new Dictionary { { "ownerId", ownerId }, { "shared", shared } }; + return await GroupListAsync("Items", parameters).ConfigureAwait(false); } public async Task TemplateAsync() diff --git a/src/Seq.Api/Api/ResourceGroups/ExpressionsResourceGroup.cs b/src/Seq.Api/Api/ResourceGroups/ExpressionsResourceGroup.cs index b0e1bbb..c43d1c2 100644 --- a/src/Seq.Api/Api/ResourceGroups/ExpressionsResourceGroup.cs +++ b/src/Seq.Api/Api/ResourceGroups/ExpressionsResourceGroup.cs @@ -18,5 +18,13 @@ public Task ToStrictAsync(string fuzzy) {"fuzzy", fuzzy} }); } + + public Task ToSqlAsync(string fuzzy) + { + return GroupGetAsync("ToSql", new Dictionary + { + {"fuzzy", fuzzy} + }); + } } } \ No newline at end of file diff --git a/src/Seq.Api/Api/ResourceGroups/SqlQueriesResourceGroup.cs b/src/Seq.Api/Api/ResourceGroups/SqlQueriesResourceGroup.cs index 8dbb597..3b84725 100644 --- a/src/Seq.Api/Api/ResourceGroups/SqlQueriesResourceGroup.cs +++ b/src/Seq.Api/Api/ResourceGroups/SqlQueriesResourceGroup.cs @@ -18,10 +18,9 @@ public async Task FindAsync(string id) return await GroupGetAsync("Item", new Dictionary { { "id", id } }).ConfigureAwait(false); } - public async Task> ListAsync(string ownerId = null, bool shared = false) + public async Task> ListAsync() { - var parameters = new Dictionary{{"ownerId", ownerId}, {"shared", shared}}; - return await GroupListAsync("Items", parameters).ConfigureAwait(false); + return await GroupListAsync("Items").ConfigureAwait(false); } public async Task TemplateAsync()