Unified · Split
| @@ -1 +1 @@ | ||
| 1 | −2.1.465.0 | |
| 1 | +2.2.8.0 | |
| @@ -58,6 +58,6 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 64 | 64 | |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | ||
| 30 | 30 | // |
| 31 | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | 32 | // by using the '*' as shown below: |
| 33 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 36 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 33 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 36 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -76,7 +76,7 @@ using System.Windows; · 75 unmodified lines | ||
| 76 | 76 | // |
| 77 | 77 | // You can specify all the values or you can default the Build and Revision Numbers |
| 78 | 78 | // by using the '*' as shown below: |
| 79 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 80 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 81 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 82 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 79 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 80 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 81 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 82 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -76,7 +76,7 @@ using System.Windows; · 75 unmodified lines | ||
| 76 | 76 | // |
| 77 | 77 | // You can specify all the values or you can default the Build and Revision Numbers |
| 78 | 78 | // by using the '*' as shown below: |
| 79 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 80 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 81 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 82 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 79 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 80 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 81 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 82 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -208,7 +208,7 @@ Second parameter, optional, is a boolean flag representing if time in dataset sh · 207 unmodified lines | ||
| 208 | 208 | |
| 209 | 209 | * Signature: `Top(N|N%, [normalizeTime], expression)` |
| 210 | 210 | * Example: `Top(50%, FILTER ActiveMeasurements WHERE SignalType='FREQ')` |
| 211 | −* Variants: `Top` | |
| 211 | +* Variants: `Top`, `Largest` | |
| 212 | 212 | * Execution: Immediate in-memory array load |
| 213 | 213 | |
| 214 | 214 | ## Bottom |
| @@ -220,7 +220,7 @@ Second parameter, optional, is a boolean flag representing if time in dataset sh · 5 unmodified lines | ||
| 220 | 220 | |
| 221 | 221 | * Signature: `Bottom(N|N%, [normalizeTime], expression)` |
| 222 | 222 | * Example: `Bottom(100, false, FILTER ActiveMeasurements WHERE SignalType='FREQ')` |
| 223 | −* Variants: `Bottom`, `Bot` | |
| 223 | +* Variants: `Bottom`, `Bot`, `Smallest` | |
| 224 | 224 | * Execution: Immediate in-memory array load |
| 225 | 225 | |
| 226 | 226 | ## Random |
| @@ -282,7 +282,7 @@ Returns a series of values that represent the time difference, in seconds, betwe · 55 unmodified lines | ||
| 282 | 282 | |
| 283 | 283 | * Signature: `TimeDifference(expression)` |
| 284 | 284 | * Example: `TimeDifference(FILTER ActiveMeasurements WHERE SignalType='FREQ')` |
| 285 | −* Variants: `TimeDifference`, `TimeDiff` | |
| 285 | +* Variants: `TimeDifference`, `TimeDiff`, `Elapsed` | |
| 286 | 286 | * Execution: Deferred enumeration |
| 287 | 287 | |
| 288 | 288 | ## Derivative |
| @@ -29,6 +29,6 @@ Imports System.Runtime.InteropServices · 28 unmodified lines | ||
| 29 | 29 | ' |
| 30 | 30 | ' You can specify all the values or you can default the Build and Revision Numbers |
| 31 | 31 | ' by using the '*' as shown below: |
| 32 | −' [assembly: AssemblyVersion("2.1.465.0")] | |
| 33 | −<Assembly: AssemblyVersion("2.1.465.0")> | |
| 34 | −<Assembly: AssemblyFileVersion("2.1.465.0")> | |
| 32 | +' [assembly: AssemblyVersion("2.2.8.0")] | |
| 33 | +<Assembly: AssemblyVersion("2.2.8.0")> | |
| 34 | +<Assembly: AssemblyFileVersion("2.2.8.0")> | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -59,7 +59,7 @@ using System.Runtime.InteropServices; · 58 unmodified lines | ||
| 59 | 59 | // |
| 60 | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | 61 | // by using the '*' as shown below: |
| 62 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 65 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 62 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 65 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | ||
| 30 | 30 | // |
| 31 | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | 32 | // by using the '*' as shown below: |
| 33 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 36 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 33 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 36 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -54,7 +54,7 @@ namespace GrafanaAdapters · 53 unmodified lines | ||
| 54 | 54 | m_baseTicks = UnixTimeTag.BaseTicks.Value; |
| 55 | 55 | } |
| 56 | 56 | |
| 57 | − protected override IEnumerable<DataSourceValue> QueryDataSourceValues(DateTime startTime, DateTime stopTime, bool decimate, Dictionary<ulong, string> targetMap) | |
| 57 | + protected override IEnumerable<DataSourceValue> QueryDataSourceValues(DateTime startTime, DateTime stopTime, string interval, bool decimate, Dictionary<ulong, string> targetMap) | |
| 58 | 58 | { |
| 59 | 59 | return m_parent.Archive.ReadData(targetMap.Keys.Select(pointID => (int)pointID), startTime, stopTime, false).Select(dataPoint => new DataSourceValue |
| 60 | 60 | { |
| @@ -238,7 +238,7 @@ namespace GrafanaAdapters · 237 unmodified lines | ||
| 238 | 238 | /// <remarks> |
| 239 | 239 | /// Signature: <c>Top(N|N%, [normalizeTime], expression)</c><br/> |
| 240 | 240 | /// Example: <c>Top(50%, FILTER ActiveMeasurements WHERE SignalType='FREQ')</c><br/> |
| 241 | − /// Variants: Top<br/> | |
| 241 | + /// Variants: Top, Largest<br/> | |
| 242 | 242 | /// Execution: Immediate in-memory array load. |
| 243 | 243 | /// </remarks> |
| 244 | 244 | Top, |
| @@ -251,7 +251,7 @@ namespace GrafanaAdapters · 6 unmodified lines | ||
| 251 | 251 | /// <remarks> |
| 252 | 252 | /// Signature: <c>Bottom(N|N%, [normalizeTime], expression)</c><br/> |
| 253 | 253 | /// Example: <c>Bottom(100, false, FILTER ActiveMeasurements WHERE SignalType='FREQ')</c><br/> |
| 254 | − /// Variants: Bottom, Bot<br/> | |
| 254 | + /// Variants: Bottom, Bot, Smallest<br/> | |
| 255 | 255 | /// Execution: Immediate in-memory array load. |
| 256 | 256 | /// </remarks> |
| 257 | 257 | Bottom, |
| @@ -319,7 +319,7 @@ namespace GrafanaAdapters · 61 unmodified lines | ||
| 319 | 319 | /// <remarks> |
| 320 | 320 | /// Signature: <c>TimeDifference(expression)</c><br/> |
| 321 | 321 | /// Example: <c>TimeDifference(FILTER ActiveMeasurements WHERE SignalType='FREQ')</c><br/> |
| 322 | − /// Variants: TimeDifference, TimeDiff<br/> | |
| 322 | + /// Variants: TimeDifference, TimeDiff, Elapsed<br/> | |
| 323 | 323 | /// Execution: Deferred enumeration. |
| 324 | 324 | /// </remarks> |
| 325 | 325 | TimeDifference, |
| @@ -463,7 +463,7 @@ namespace GrafanaAdapters · 137 unmodified lines | ||
| 463 | 463 | DateTime stopTime = request.range.to.ParseJsonTimestamp(); |
| 464 | 464 | int maxDataPoints = (int)(request.maxDataPoints * 1.05D); |
| 465 | 465 | |
| 466 | − DataSourceValueGroup[] valueGroups = QueryTargets(request.targets.Select(target => target.target.Trim()), startTime, stopTime, true, cancellationToken).ToArray(); | |
| 466 | + DataSourceValueGroup[] valueGroups = QueryTargets(request.targets.Select(target => target.target.Trim()), startTime, stopTime, request.interval, true, cancellationToken).ToArray(); | |
| 467 | 467 | |
| 468 | 468 | // Establish result series sequentially so that order remains consistent between calls |
| 469 | 469 | List<TimeSeriesValues> result = valueGroups.Select(valueGroup => new TimeSeriesValues { target = valueGroup.Target }).ToList(); |
| @@ -493,12 +493,13 @@ namespace GrafanaAdapters · 23 unmodified lines | ||
| 493 | 493 | /// </summary> |
| 494 | 494 | /// <param name="startTime">Start-time for query.</param> |
| 495 | 495 | /// <param name="stopTime">Stop-time for query.</param> |
| 496 | + /// <param name="interval">Interval from Grafana request.</param> | |
| 496 | 497 | /// <param name="decimate">Flag that determines if data should be decimated over provided time range.</param> |
| 497 | 498 | /// <param name="targetMap">Set of IDs with associated targets to query.</param> |
| 498 | 499 | /// <returns>Queried data source data in terms of value and time.</returns> |
| 499 | − protected abstract IEnumerable<DataSourceValue> QueryDataSourceValues(DateTime startTime, DateTime stopTime, bool decimate, Dictionary<ulong, string> targetMap); | |
| 500 | + protected abstract IEnumerable<DataSourceValue> QueryDataSourceValues(DateTime startTime, DateTime stopTime, string interval, bool decimate, Dictionary<ulong, string> targetMap); | |
| 500 | 501 | |
| 501 | − private IEnumerable<DataSourceValueGroup> QueryTargets(IEnumerable<string> targets, DateTime startTime, DateTime stopTime, bool decimate, CancellationToken cancellationToken) | |
| 502 | + private IEnumerable<DataSourceValueGroup> QueryTargets(IEnumerable<string> targets, DateTime startTime, DateTime stopTime, string interval, bool decimate, CancellationToken cancellationToken) | |
| 502 | 503 | { |
| 503 | 504 | // A single target might look like the following: |
| 504 | 505 | // PPA:15; STAT:20; SETSUM(COUNT(PPA:8; PPA:9; PPA:10)); FILTER ActiveMeasurements WHERE SignalType IN ('IPHA', 'VPHA'); RANGE(PPA:99; SUM(FILTER ActiveMeasurements WHERE SignalType = 'FREQ'; STAT:12)) |
| @@ -539,7 +540,7 @@ namespace GrafanaAdapters · 34 unmodified lines | ||
| 539 | 540 | { |
| 540 | 541 | // Execute series functions |
| 541 | 542 | foreach (Tuple<SeriesFunction, string, bool> parsedFunction in seriesFunctions.Select(ParseSeriesFunction)) |
| 542 | − foreach (DataSourceValueGroup valueGroup in ExecuteSeriesFunction(parsedFunction, startTime, stopTime, decimate, cancellationToken)) | |
| 543 | + foreach (DataSourceValueGroup valueGroup in ExecuteSeriesFunction(parsedFunction, startTime, stopTime, interval, decimate, cancellationToken)) | |
| 543 | 544 | yield return valueGroup; |
| 544 | 545 | |
| 545 | 546 | // Use reduced target set that excludes any series functions |
| @@ -572,7 +573,7 @@ namespace GrafanaAdapters · 26 unmodified lines | ||
| 572 | 573 | long readCount = 0; |
| 573 | 574 | |
| 574 | 575 | // Query underlying data source for each target - to prevent parallel read from data source we enumerate immediately |
| 575 | − List<DataSourceValue> dataValues = QueryDataSourceValues(startTime, stopTime, decimate, targetMap) | |
| 576 | + List<DataSourceValue> dataValues = QueryDataSourceValues(startTime, stopTime, interval, decimate, targetMap) | |
| 576 | 577 | .TakeWhile(dataValue => readCount++ % 10000 != 0 || !cancellationToken.IsCancellationRequested).ToList(); |
| 577 | 578 | |
| 578 | 579 | foreach (KeyValuePair<ulong, string> target in targetMap) |
| @@ -584,7 +585,7 @@ namespace GrafanaAdapters · 5 unmodified lines | ||
| 584 | 585 | } |
| 585 | 586 | } |
| 586 | 587 | |
| 587 | − private IEnumerable<DataSourceValueGroup> ExecuteSeriesFunction(Tuple<SeriesFunction, string, bool> parsedFunction, DateTime startTime, DateTime stopTime, bool decimate, CancellationToken cancellationToken) | |
| 588 | + private IEnumerable<DataSourceValueGroup> ExecuteSeriesFunction(Tuple<SeriesFunction, string, bool> parsedFunction, DateTime startTime, DateTime stopTime, string interval, bool decimate, CancellationToken cancellationToken) | |
| 588 | 589 | { |
| 589 | 590 | SeriesFunction seriesFunction = parsedFunction.Item1; |
| 590 | 591 | string expression = parsedFunction.Item2; |
| @@ -660,7 +661,7 @@ namespace GrafanaAdapters · 69 unmodified lines | ||
| 660 | 661 | decimate = false; |
| 661 | 662 | |
| 662 | 663 | // Query function expression to get series data |
| 663 | − IEnumerable<DataSourceValueGroup> dataset = QueryTargets(new[] { targetExpression }, startTime, stopTime, decimate, cancellationToken); | |
| 664 | + IEnumerable<DataSourceValueGroup> dataset = QueryTargets(new[] { targetExpression }, startTime, stopTime, interval, decimate, cancellationToken); | |
| 664 | 665 | |
| 665 | 666 | if (setOperation) |
| 666 | 667 | { |
| @@ -756,8 +757,8 @@ namespace GrafanaAdapters · 89 unmodified lines | ||
| 756 | 757 | s_standardDeviationSampleExpression = new Regex(string.Format(GetExpression, "(StandardDeviationSample|StdDevSamp)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| 757 | 758 | s_medianExpression = new Regex(string.Format(GetExpression, "(Median|Med|Mid)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| 758 | 759 | s_modeExpression = new Regex(string.Format(GetExpression, "Mode"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| 759 | − s_topExpression = new Regex(string.Format(GetExpression, "Top"), RegexOptions.Compiled | RegexOptions.IgnoreCase); | |
| 760 | − s_bottomExpression = new Regex(string.Format(GetExpression, "(Bottom|Bot)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); | |
| 760 | + s_topExpression = new Regex(string.Format(GetExpression, "(Top|Largest)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); | |
| 761 | + s_bottomExpression = new Regex(string.Format(GetExpression, "(Bottom|Bot|Smallest)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); | |
| 761 | 762 | s_randomExpression = new Regex(string.Format(GetExpression, "(Random|Rand|Sample)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| 762 | 763 | s_firstExpression = new Regex(string.Format(GetExpression, "First"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| 763 | 764 | s_lastExpression = new Regex(string.Format(GetExpression, "Last"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| @@ -26,8 +26,8 @@ using System.Reflection; · 25 unmodified lines | ||
| 26 | 26 | using System.Runtime.InteropServices; |
| 27 | 27 | |
| 28 | 28 | // Assembly identity attributes. |
| 29 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 30 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 29 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 30 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 31 | 31 | |
| 32 | 32 | // Informational attributes. |
| 33 | 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -26,8 +26,8 @@ using System.Reflection; · 25 unmodified lines | ||
| 26 | 26 | using System.Runtime.InteropServices; |
| 27 | 27 | |
| 28 | 28 | // Assembly identity attributes. |
| 29 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 30 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 29 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 30 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 31 | 31 | |
| 32 | 32 | // Informational attributes. |
| 33 | 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | ||
| 30 | 30 | // |
| 31 | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | 32 | // by using the '*' as shown below: |
| 33 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 36 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 33 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 36 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -46,6 +46,6 @@ using System.Runtime.InteropServices; · 45 unmodified lines | ||
| 46 | 46 | [assembly: Guid("D8064F6E-0B5D-4CBB-884E-75A2E11CA779")] |
| 47 | 47 | |
| 48 | 48 | // Assembly identity attributes. |
| 49 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 50 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 51 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 49 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 50 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 51 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | ||
| 30 | 30 | // |
| 31 | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | 32 | // by using the '*' as shown below: |
| 33 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 36 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 33 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 36 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | ||
| 30 | 30 | // |
| 31 | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | 32 | // by using the '*' as shown below: |
| 33 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 36 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 33 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 36 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -26,8 +26,8 @@ using System.Reflection; · 25 unmodified lines | ||
| 26 | 26 | using System.Runtime.InteropServices; |
| 27 | 27 | |
| 28 | 28 | // Assembly identity attributes. |
| 29 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 30 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 29 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 30 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 31 | 31 | |
| 32 | 32 | // Informational attributes. |
| 33 | 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -57,7 +57,7 @@ using System.Runtime.InteropServices; · 56 unmodified lines | ||
| 57 | 57 | // |
| 58 | 58 | // You can specify all the values or you can default the Build and Revision Numbers |
| 59 | 59 | // by using the '*' as shown below: |
| 60 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 61 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 60 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 61 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -28,10 +28,10 @@ using System.Runtime.CompilerServices; · 27 unmodified lines | ||
| 28 | 28 | using System.Runtime.InteropServices; |
| 29 | 29 | |
| 30 | 30 | // Assembly identity attributes. |
| 31 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 31 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 32 | 32 | |
| 33 | 33 | [assembly: SuppressMessage("Microsoft.Usage", "CA2243:AttributeStringLiteralsShouldParseCorrectly")] |
| 34 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 34 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 35 | 35 | |
| 36 | 36 | // Informational attributes. |
| 37 | 37 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -71,6 +71,38 @@ namespace GSF · 70 unmodified lines | ||
| 71 | 71 | |
| 72 | 72 | #region [ Methods ] |
| 73 | 73 | |
| 74 | + /// <summary> | |
| 75 | + /// Determines whether the range contains the given value. | |
| 76 | + /// </summary> | |
| 77 | + /// <param name="value">The value to be compared with.</param> | |
| 78 | + /// <returns>True if the value exists within the range; false otherwise.</returns> | |
| 79 | + public bool Contains(T value) | |
| 80 | + { | |
| 81 | + return Contains(value, Comparer<T>.Default); | |
| 82 | + } | |
| 83 | + | |
| 84 | + /// <summary> | |
| 85 | + /// Determines whether the range contains the given value. | |
| 86 | + /// </summary> | |
| 87 | + /// <param name="value">The value to be compared with.</param> | |
| 88 | + /// <param name="comparer">The comparer used to compare objects of type <typeparamref name="T"/>.</param> | |
| 89 | + /// <returns>True if the value exists within the range; false otherwise.</returns> | |
| 90 | + public bool Contains(T value, IComparer<T> comparer) | |
| 91 | + { | |
| 92 | + return Contains(value, comparer.Compare); | |
| 93 | + } | |
| 94 | + | |
| 95 | + /// <summary> | |
| 96 | + /// Determines whether the range contains the given value. | |
| 97 | + /// </summary> | |
| 98 | + /// <param name="value">The value to be compared with.</param> | |
| 99 | + /// <param name="comparison">The comparison used to compare objects of type <typeparamref name="T"/>.</param> | |
| 100 | + /// <returns>True if the value exists within the range; false otherwise.</returns> | |
| 101 | + public bool Contains(T value, Comparison<T> comparison) | |
| 102 | + { | |
| 103 | + return comparison(m_start, value) <= 0 && comparison(value, m_end) <= 0; | |
| 104 | + } | |
| 105 | + | |
| 74 | 106 | /// <summary> |
| 75 | 107 | /// Determines whether the range overlaps with the given range. |
| 76 | 108 | /// </summary> |
| @@ -57,7 +57,7 @@ using System.Runtime.InteropServices; · 56 unmodified lines | ||
| 57 | 57 | // |
| 58 | 58 | // You can specify all the values or you can default the Build and Revision Numbers |
| 59 | 59 | // by using the '*' as shown below: |
| 60 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 61 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 60 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 61 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -30,6 +30,6 @@ using System.Runtime.InteropServices; · 29 unmodified lines | ||
| 30 | 30 | // |
| 31 | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | 32 | // by using the '*' as shown below: |
| 33 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 33 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| @@ -230,7 +230,7 @@ namespace GSF.Historian.Files · 229 unmodified lines | ||
| 230 | 230 | |
| 231 | 231 | buffer.ValidateParameters(startIndex, length); |
| 232 | 232 | |
| 233 | − LittleEndian.CopyBytes(Time.Value, buffer, startIndex); | |
| 233 | + LittleEndian.CopyBytes((double)Time.Value, buffer, startIndex); | |
| 234 | 234 | LittleEndian.CopyBytes(Flags, buffer, startIndex + 8); |
| 235 | 235 | LittleEndian.CopyBytes(Value, buffer, startIndex + 12); |
| 236 | 236 | |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -52,7 +52,7 @@ using System.Runtime.InteropServices; · 51 unmodified lines | ||
| 52 | 52 | // |
| 53 | 53 | // You can specify all the values or you can default the Build and Revision Numbers |
| 54 | 54 | // by using the '*' as shown below: |
| 55 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 56 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 57 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 58 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 55 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 56 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 57 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 58 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -46,6 +46,7 @@ · 45 unmodified lines | ||
| 46 | 46 | using System; |
| 47 | 47 | using System.ComponentModel; |
| 48 | 48 | using System.Drawing; |
| 49 | +using System.Net; | |
| 49 | 50 | |
| 50 | 51 | // This FTP library is based on a similar C# library found on "The Code Project" web site originally written by |
| 51 | 52 | // Alex Kwok (no license specified), then enhanced by Uwe Keim (licensed under The Code Project Open License). |
| @@ -244,6 +245,77 @@ namespace GSF.Net.Ftp · 192 unmodified lines | ||
| 244 | 245 | } |
| 245 | 246 | } |
| 246 | 247 | |
| 248 | + /// <summary> | |
| 249 | + /// Gets or sets the passive/active mode of the server. | |
| 250 | + /// </summary> | |
| 251 | + [Browsable(true), Category("Configuration"), Description("Specify passive/active mode of FTP server."), DefaultValue(true)] | |
| 252 | + public bool Passive | |
| 253 | + { | |
| 254 | + get | |
| 255 | + { | |
| 256 | + return m_currentState.Passive; | |
| 257 | + } | |
| 258 | + set | |
| 259 | + { | |
| 260 | + m_currentState.Passive = value; | |
| 261 | + } | |
| 262 | + } | |
| 263 | + | |
| 264 | + /// <summary> | |
| 265 | + /// Gets or sets the IP address to send with the PORT command. | |
| 266 | + /// </summary> | |
| 267 | + [Browsable(true), Category("Configuration"), Description("Specify IP address to send with PORT command."), DefaultValue(null)] | |
| 268 | + public string ActiveAddress | |
| 269 | + { | |
| 270 | + get | |
| 271 | + { | |
| 272 | + return m_currentState.ActiveAddress.ToString(); | |
| 273 | + } | |
| 274 | + set | |
| 275 | + { | |
| 276 | + IPAddress address; | |
| 277 | + | |
| 278 | + if (IPAddress.TryParse(value, out address)) | |
| 279 | + m_currentState.ActiveAddress = address; | |
| 280 | + else | |
| 281 | + m_currentState.ActiveAddress = null; | |
| 282 | + } | |
| 283 | + } | |
| 284 | + | |
| 285 | + /// <summary> | |
| 286 | + /// Gets or sets the minimum value in the range of ports | |
| 287 | + /// used when listening for connections in active mode. | |
| 288 | + /// </summary> | |
| 289 | + [Browsable(true), Category("Configuration"), Description("Specify minimum port in range of active ports."), DefaultValue(0)] | |
| 290 | + public int MinActivePort | |
| 291 | + { | |
| 292 | + get | |
| 293 | + { | |
| 294 | + return m_currentState.MinActivePort; | |
| 295 | + } | |
| 296 | + set | |
| 297 | + { | |
| 298 | + m_currentState.MinActivePort = value; | |
| 299 | + } | |
| 300 | + } | |
| 301 | + | |
| 302 | + /// <summary> | |
| 303 | + /// Gets or sets the maximum value in the range of ports | |
| 304 | + /// used when listening for connections in active mode. | |
| 305 | + /// </summary> | |
| 306 | + [Browsable(true), Category("Configuration"), Description("Specify maximum port in range of active ports."), DefaultValue(0)] | |
| 307 | + public int MaxActivePort | |
| 308 | + { | |
| 309 | + get | |
| 310 | + { | |
| 311 | + return m_currentState.MaxActivePort; | |
| 312 | + } | |
| 313 | + set | |
| 314 | + { | |
| 315 | + m_currentState.MaxActivePort = value; | |
| 316 | + } | |
| 317 | + } | |
| 318 | + | |
| 247 | 319 | /// <summary> |
| 248 | 320 | /// Gets or sets current FTP session directory. |
| 249 | 321 | /// </summary> |
| @@ -46,9 +46,12 @@ · 45 unmodified lines | ||
| 46 | 46 | using System; |
| 47 | 47 | using System.Collections; |
| 48 | 48 | using System.IO; |
| 49 | +using System.Linq; | |
| 50 | +using System.Net; | |
| 49 | 51 | using System.Net.Sockets; |
| 50 | 52 | using System.Text; |
| 51 | 53 | using System.Text.RegularExpressions; |
| 54 | +using System.Threading; | |
| 52 | 55 | |
| 53 | 56 | namespace GSF.Net.Ftp |
| 54 | 57 | { |
| @@ -89,6 +92,10 @@ namespace GSF.Net.Ftp · 34 unmodified lines | ||
| 89 | 92 | private string m_server; |
| 90 | 93 | private int m_port; |
| 91 | 94 | private int m_timeout; |
| 95 | + private bool m_passive; | |
| 96 | + private IPAddress m_activeAddress; | |
| 97 | + private Range<int> m_activePortRange; | |
| 98 | + private int m_lastActivePort; | |
| 92 | 99 | private TransferMode m_currentTransferMode; |
| 93 | 100 | private FtpResponse m_lastResponse; |
| 94 | 101 | private bool m_disposed; |
| @@ -103,6 +110,7 @@ namespace GSF.Net.Ftp · 8 unmodified lines | ||
| 103 | 110 | m_server = "localhost"; |
| 104 | 111 | m_port = 21; |
| 105 | 112 | m_timeout = 30000; |
| 113 | + m_passive = true; | |
| 106 | 114 | m_sessionHost = host; |
| 107 | 115 | m_currentTransferMode = TransferMode.Unknown; |
| 108 | 116 | } |
| @@ -158,6 +166,51 @@ namespace GSF.Net.Ftp · 49 unmodified lines | ||
| 158 | 166 | } |
| 159 | 167 | } |
| 160 | 168 | |
| 169 | + internal bool Passive | |
| 170 | + { | |
| 171 | + get | |
| 172 | + { | |
| 173 | + return m_passive; | |
| 174 | + } | |
| 175 | + set | |
| 176 | + { | |
| 177 | + m_passive = value; | |
| 178 | + } | |
| 179 | + } | |
| 180 | + | |
| 181 | + internal IPAddress ActiveAddress | |
| 182 | + { | |
| 183 | + get | |
| 184 | + { | |
| 185 | + return m_activeAddress ?? (m_activeAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(addr => addr.AddressFamily == AddressFamily.InterNetwork)); | |
| 186 | + } | |
| 187 | + set | |
| 188 | + { | |
| 189 | + m_activeAddress = value; | |
| 190 | + } | |
| 191 | + } | |
| 192 | + | |
| 193 | + internal Range<int> DataChannelPortRange | |
| 194 | + { | |
| 195 | + get | |
| 196 | + { | |
| 197 | + return m_activePortRange; | |
| 198 | + } | |
| 199 | + set | |
| 200 | + { | |
| 201 | + if (value.Start <= IPEndPoint.MinPort) | |
| 202 | + throw new ArgumentException($"Minimum port in range must be greater than {IPEndPoint.MinPort}.", nameof(value)); | |
| 203 | + | |
| 204 | + if (value.End > IPEndPoint.MaxPort) | |
| 205 | + throw new ArgumentException($"Maximum port in range must be less than or equal to {IPEndPoint.MaxPort}.", nameof(value)); | |
| 206 | + | |
| 207 | + if (value.Start > value.End) | |
| 208 | + throw new ArgumentException("Start port must be less than or equal to end port."); | |
| 209 | + | |
| 210 | + m_activePortRange = value; | |
| 211 | + } | |
| 212 | + } | |
| 213 | + | |
| 161 | 214 | /// <summary> |
| 162 | 215 | /// Last response from control channel. |
| 163 | 216 | /// </summary> |
| @@ -400,7 +453,7 @@ namespace GSF.Net.Ftp · 236 unmodified lines | ||
| 400 | 453 | try |
| 401 | 454 | { |
| 402 | 455 | Type(TransferMode.Ascii); |
| 403 | − FtpDataStream dataStream = GetPassiveDataStream(); | |
| 456 | + FtpDataStream dataStream = GetDataStream(); | |
| 404 | 457 | Queue lineQueue = new Queue(); |
| 405 | 458 | |
| 406 | 459 | Command("LIST"); |
| @@ -434,6 +487,80 @@ namespace GSF.Net.Ftp · 27 unmodified lines | ||
| 434 | 487 | } |
| 435 | 488 | } |
| 436 | 489 | |
| 490 | + internal FtpDataStream GetDataStream() | |
| 491 | + { | |
| 492 | + return GetDataStream(TransferDirection.Download); | |
| 493 | + } | |
| 494 | + | |
| 495 | + internal FtpDataStream GetDataStream(TransferDirection direction) | |
| 496 | + { | |
| 497 | + return m_passive ? GetPassiveDataStream(direction) : GetActiveDataStream(direction); | |
| 498 | + } | |
| 499 | + | |
| 500 | + internal FtpDataStream GetActiveDataStream() | |
| 501 | + { | |
| 502 | + return GetActiveDataStream(TransferDirection.Download); | |
| 503 | + } | |
| 504 | + | |
| 505 | + internal FtpDataStream GetActiveDataStream(TransferDirection direction) | |
| 506 | + { | |
| 507 | + IPAddress address = ActiveAddress; | |
| 508 | + byte[] addressBytes = address.GetAddressBytes(); | |
| 509 | + | |
| 510 | + int firstPort = GetActivePort(); | |
| 511 | + int port = firstPort; | |
| 512 | + | |
| 513 | + while (true) | |
| 514 | + { | |
| 515 | + try | |
| 516 | + { | |
| 517 | + TcpListener listener = new TcpListener(address, port); | |
| 518 | + TcpClient client; | |
| 519 | + | |
| 520 | + listener.Start(); | |
| 521 | + | |
| 522 | + try | |
| 523 | + { | |
| 524 | + port = (listener.LocalEndpoint as IPEndPoint)?.Port ?? 0; | |
| 525 | + Command($"PORT {addressBytes[0]},{addressBytes[1]},{addressBytes[2]},{addressBytes[3]},{port / 256},{port % 256}"); | |
| 526 | + | |
| 527 | + for (int i = 0; !listener.Pending(); i++) | |
| 528 | + { | |
| 529 | + if (i * 200 >= m_timeout) | |
| 530 | + throw new TimeoutException("Timeout expired while waiting for connection on active FTP data channel."); | |
| 531 | + | |
| 532 | + Thread.Sleep(200); | |
| 533 | + } | |
| 534 | + | |
| 535 | + client = listener.AcceptTcpClient(); | |
| 536 | + | |
| 537 | + if (direction == TransferDirection.Download) | |
| 538 | + return new FtpInputDataStream(this, client); | |
| 539 | + else | |
| 540 | + return new FtpOutputDataStream(this, client); | |
| 541 | + } | |
| 542 | + finally | |
| 543 | + { | |
| 544 | + listener.Stop(); | |
| 545 | + } | |
| 546 | + } | |
| 547 | + catch (IOException ie) | |
| 548 | + { | |
| 549 | + throw new Exception("Failed to open active port (" + port + ") data connection due to IO exception: " + ie.Message + ".", ie); | |
| 550 | + } | |
| 551 | + catch (SocketException se) | |
| 552 | + { | |
| 553 | + if (se.SocketErrorCode != SocketError.AddressAlreadyInUse) | |
| 554 | + throw new Exception("Failed to open active port (" + port + ") data connection due to socket exception: " + se.Message + ".", se); | |
| 555 | + } | |
| 556 | + | |
| 557 | + port = GetActivePort(); | |
| 558 | + | |
| 559 | + if (port == firstPort) | |
| 560 | + throw new Exception($"All ports in active port range ({m_activePortRange.Start}-{m_activePortRange.End}) are already in use."); | |
| 561 | + } | |
| 562 | + } | |
| 563 | + | |
| 437 | 564 | internal FtpDataStream GetPassiveDataStream() |
| 438 | 565 | { |
| 439 | 566 | return GetPassiveDataStream(TransferDirection.Download); |
| @@ -464,6 +591,21 @@ namespace GSF.Net.Ftp · 24 unmodified lines | ||
| 464 | 591 | } |
| 465 | 592 | } |
| 466 | 593 | |
| 594 | + private int GetActivePort() | |
| 595 | + { | |
| 596 | + if ((object)m_activePortRange == null) | |
| 597 | + return 0; | |
| 598 | + | |
| 599 | + if (m_lastActivePort == 0) | |
| 600 | + m_lastActivePort = GSF.Security.Cryptography.Random.Int32Between(m_activePortRange.Start, m_activePortRange.End); | |
| 601 | + else if (m_lastActivePort == m_activePortRange.End) | |
| 602 | + m_lastActivePort = m_activePortRange.Start; | |
| 603 | + else | |
| 604 | + m_lastActivePort++; | |
| 605 | + | |
| 606 | + return m_lastActivePort; | |
| 607 | + } | |
| 608 | + | |
| 467 | 609 | private int GetPassivePort() |
| 468 | 610 | { |
| 469 | 611 | Command("PASV"); |
| @@ -550,7 +550,7 @@ namespace GSF.Net.Ftp · 549 unmodified lines | ||
| 550 | 550 | { |
| 551 | 551 | InitHashtable(); |
| 552 | 552 | |
| 553 | − FtpDataStream stream = m_session.ControlChannel.GetPassiveDataStream(TransferDirection.Upload); | |
| 553 | + FtpDataStream stream = m_session.ControlChannel.GetDataStream(TransferDirection.Upload); | |
| 554 | 554 | |
| 555 | 555 | try |
| 556 | 556 | { |
| @@ -238,7 +238,7 @@ namespace GSF.Net.Ftp · 237 unmodified lines | ||
| 238 | 238 | if (offset != 0) |
| 239 | 239 | Session.ControlChannel.REST(offset); |
| 240 | 240 | |
| 241 | − FtpDataStream stream = Session.ControlChannel.GetPassiveDataStream(dir); | |
| 241 | + FtpDataStream stream = Session.ControlChannel.GetDataStream(dir); | |
| 242 | 242 | |
| 243 | 243 | try |
| 244 | 244 | { |
| @@ -207,13 +207,14 @@ namespace GSF.Net.Ftp · 206 unmodified lines | ||
| 207 | 207 | |
| 208 | 208 | m_session.Host.OnBeginFileTransfer(m_localFile, m_remoteFile, m_transferDirection); |
| 209 | 209 | |
| 210 | + remoteStream = m_session.ControlChannel.GetDataStream(m_transferDirection); | |
| 211 | + m_ftpFileCommandRoutine(m_remoteFile); | |
| 212 | + | |
| 210 | 213 | if (m_transferDirection == TransferDirection.Download) |
| 211 | − localStream = new FileStream(m_localFile, FileMode.OpenOrCreate); | |
| 214 | + localStream = new FileStream(m_localFile, FileMode.Create); | |
| 212 | 215 | else |
| 213 | 216 | localStream = new FileStream(m_localFile, FileMode.Open, FileAccess.Read); |
| 214 | − remoteStream = m_session.ControlChannel.GetPassiveDataStream(m_transferDirection); | |
| 215 | 217 | |
| 216 | − m_ftpFileCommandRoutine(m_remoteFile); | |
| 217 | 218 | m_streamCopyRoutine(remoteStream, localStream); |
| 218 | 219 | |
| 219 | 220 | // Dispose remote stream before testing file transfer result to ensure |
| @@ -42,6 +42,7 @@ · 41 unmodified lines | ||
| 42 | 42 | #endregion |
| 43 | 43 | |
| 44 | 44 | using System; |
| 45 | +using System.Net; | |
| 45 | 46 | using System.Threading; |
| 46 | 47 | |
| 47 | 48 | namespace GSF.Net.Ftp |
| @@ -119,6 +120,54 @@ namespace GSF.Net.Ftp · 71 unmodified lines | ||
| 119 | 120 | } |
| 120 | 121 | } |
| 121 | 122 | |
| 123 | + public bool Passive | |
| 124 | + { | |
| 125 | + get | |
| 126 | + { | |
| 127 | + return m_ctrlChannel.Passive; | |
| 128 | + } | |
| 129 | + set | |
| 130 | + { | |
| 131 | + throw new InvalidOperationException(); | |
| 132 | + } | |
| 133 | + } | |
| 134 | + | |
| 135 | + public IPAddress ActiveAddress | |
| 136 | + { | |
| 137 | + get | |
| 138 | + { | |
| 139 | + return m_ctrlChannel.ActiveAddress; | |
| 140 | + } | |
| 141 | + set | |
| 142 | + { | |
| 143 | + throw new InvalidOperationException(); | |
| 144 | + } | |
| 145 | + } | |
| 146 | + | |
| 147 | + public int MinActivePort | |
| 148 | + { | |
| 149 | + get | |
| 150 | + { | |
| 151 | + return m_ctrlChannel.DataChannelPortRange.Start; | |
| 152 | + } | |
| 153 | + set | |
| 154 | + { | |
| 155 | + throw new InvalidOperationException(); | |
| 156 | + } | |
| 157 | + } | |
| 158 | + | |
| 159 | + public int MaxActivePort | |
| 160 | + { | |
| 161 | + get | |
| 162 | + { | |
| 163 | + return m_ctrlChannel.DataChannelPortRange.End; | |
| 164 | + } | |
| 165 | + set | |
| 166 | + { | |
| 167 | + throw new InvalidOperationException(); | |
| 168 | + } | |
| 169 | + } | |
| 170 | + | |
| 122 | 171 | public FtpDirectory RootDirectory |
| 123 | 172 | { |
| 124 | 173 | get |
| @@ -42,6 +42,7 @@ · 41 unmodified lines | ||
| 42 | 42 | #endregion |
| 43 | 43 | |
| 44 | 44 | using System; |
| 45 | +using System.Net; | |
| 45 | 46 | |
| 46 | 47 | namespace GSF.Net.Ftp |
| 47 | 48 | { |
| @@ -54,6 +55,10 @@ namespace GSF.Net.Ftp · 6 unmodified lines | ||
| 54 | 55 | private string m_server; |
| 55 | 56 | private int m_port; |
| 56 | 57 | private int m_timeout; |
| 58 | + private bool m_passive; | |
| 59 | + private IPAddress m_activeAddress; | |
| 60 | + private int m_minActivePort; | |
| 61 | + private int m_maxActivePort; | |
| 57 | 62 | private readonly bool m_caseInsensitive; |
| 58 | 63 | private bool m_disposed; |
| 59 | 64 | |
| @@ -63,6 +68,7 @@ namespace GSF.Net.Ftp · 3 unmodified lines | ||
| 63 | 68 | |
| 64 | 69 | internal FtpSessionDisconnected(FtpClient h, bool caseInsensitive) |
| 65 | 70 | { |
| 71 | + m_passive = true; | |
| 66 | 72 | m_timeout = 30000; |
| 67 | 73 | m_port = 21; |
| 68 | 74 | m_host = h; |
| @@ -117,6 +123,54 @@ namespace GSF.Net.Ftp · 48 unmodified lines | ||
| 117 | 123 | } |
| 118 | 124 | } |
| 119 | 125 | |
| 126 | + public bool Passive | |
| 127 | + { | |
| 128 | + get | |
| 129 | + { | |
| 130 | + return m_passive; | |
| 131 | + } | |
| 132 | + set | |
| 133 | + { | |
| 134 | + m_passive = value; | |
| 135 | + } | |
| 136 | + } | |
| 137 | + | |
| 138 | + public IPAddress ActiveAddress | |
| 139 | + { | |
| 140 | + get | |
| 141 | + { | |
| 142 | + return m_activeAddress; | |
| 143 | + } | |
| 144 | + set | |
| 145 | + { | |
| 146 | + m_activeAddress = value; | |
| 147 | + } | |
| 148 | + } | |
| 149 | + | |
| 150 | + public int MinActivePort | |
| 151 | + { | |
| 152 | + get | |
| 153 | + { | |
| 154 | + return m_minActivePort; | |
| 155 | + } | |
| 156 | + set | |
| 157 | + { | |
| 158 | + m_minActivePort = value; | |
| 159 | + } | |
| 160 | + } | |
| 161 | + | |
| 162 | + public int MaxActivePort | |
| 163 | + { | |
| 164 | + get | |
| 165 | + { | |
| 166 | + return m_maxActivePort; | |
| 167 | + } | |
| 168 | + set | |
| 169 | + { | |
| 170 | + m_maxActivePort = value; | |
| 171 | + } | |
| 172 | + } | |
| 173 | + | |
| 120 | 174 | public FtpDirectory CurrentDirectory |
| 121 | 175 | { |
| 122 | 176 | get |
| @@ -193,6 +247,12 @@ namespace GSF.Net.Ftp · 70 unmodified lines | ||
| 193 | 247 | ctrl.Server = m_server; |
| 194 | 248 | ctrl.Port = m_port; |
| 195 | 249 | ctrl.Timeout = m_timeout; |
| 250 | + ctrl.Passive = m_passive; | |
| 251 | + ctrl.ActiveAddress = m_activeAddress; | |
| 252 | + | |
| 253 | + if (m_minActivePort > 0 && m_maxActivePort > 0) | |
| 254 | + ctrl.DataChannelPortRange = new Range<int>(m_minActivePort, m_maxActivePort); | |
| 255 | + | |
| 196 | 256 | ctrl.Connect(); |
| 197 | 257 | |
| 198 | 258 | try |
| @@ -42,6 +42,7 @@ · 41 unmodified lines | ||
| 42 | 42 | #endregion |
| 43 | 43 | |
| 44 | 44 | using System; |
| 45 | +using System.Net; | |
| 45 | 46 | |
| 46 | 47 | namespace GSF.Net.Ftp |
| 47 | 48 | { |
| @@ -66,6 +67,28 @@ namespace GSF.Net.Ftp · 18 unmodified lines | ||
| 66 | 67 | /// </summary> |
| 67 | 68 | int Timeout { get; set; } |
| 68 | 69 | |
| 70 | + /// <summary> | |
| 71 | + /// Gets or sets the passive/active mode of the FTP server. | |
| 72 | + /// </summary> | |
| 73 | + bool Passive { get; set; } | |
| 74 | + | |
| 75 | + /// <summary> | |
| 76 | + /// Gets or sets the IP address to send with the PORT command. | |
| 77 | + /// </summary> | |
| 78 | + IPAddress ActiveAddress { get; set; } | |
| 79 | + | |
| 80 | + /// <summary> | |
| 81 | + /// Gets or sets the minimum value in the range of ports | |
| 82 | + /// used when listening for connections in active mode. | |
| 83 | + /// </summary> | |
| 84 | + int MinActivePort { get; set; } | |
| 85 | + | |
| 86 | + /// <summary> | |
| 87 | + /// Gets or sets the maximum value in the range of ports | |
| 88 | + /// used when listening for connections in active mode. | |
| 89 | + /// </summary> | |
| 90 | + int MaxActivePort { get; set; } | |
| 91 | + | |
| 69 | 92 | /// <summary> |
| 70 | 93 | /// Gets or sets current FTP session directory. |
| 71 | 94 | /// </summary> |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -57,7 +57,7 @@ using System.Runtime.InteropServices; · 56 unmodified lines | ||
| 57 | 57 | // |
| 58 | 58 | // You can specify all the values or you can default the Build and Revision Numbers |
| 59 | 59 | // by using the '*' as shown below: |
| 60 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 61 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 60 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 61 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -48,8 +48,8 @@ using System.Runtime.InteropServices; · 47 unmodified lines | ||
| 48 | 48 | [assembly: Guid("6d59b0ed-1991-4f12-a739-2cf8543dd9b2")] |
| 49 | 49 | |
| 50 | 50 | // Assembly identity attributes. |
| 51 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 52 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 51 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 52 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 53 | 53 | |
| 54 | 54 | [assembly: SuppressMessage("Microsoft.Usage", "CA2243:AttributeStringLiteralsShouldParseCorrectly")] |
| 55 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 55 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -35,7 +35,7 @@ namespace GSF.SELEventParser · 34 unmodified lines | ||
| 35 | 35 | // Fields |
| 36 | 36 | private Channel<DateTime> m_timeChannel; |
| 37 | 37 | private List<Channel<double>> m_analogChannels; |
| 38 | − private List<Channel<bool>> m_digitalChannels; | |
| 38 | + private List<Channel<bool>> m_digitalChannels; | |
| 39 | 39 | |
| 40 | 40 | #endregion |
| 41 | 41 | |
| @@ -46,7 +46,6 @@ namespace GSF.SELEventParser · 4 unmodified lines | ||
| 46 | 46 | m_timeChannel = new Channel<DateTime>() { Name = "Time" }; |
| 47 | 47 | m_analogChannels = new List<Channel<double>>(); |
| 48 | 48 | m_digitalChannels = new List<Channel<bool>>(); |
| 49 | − | |
| 50 | 49 | } |
| 51 | 50 | |
| 52 | 51 | #endregion |
| @@ -89,7 +88,6 @@ namespace GSF.SELEventParser · 36 unmodified lines | ||
| 89 | 88 | } |
| 90 | 89 | } |
| 91 | 90 | |
| 92 | − | |
| 93 | 91 | #endregion |
| 94 | 92 | |
| 95 | 93 | #region [ Methods ] |
| @@ -111,6 +109,11 @@ namespace GSF.SELEventParser · 15 unmodified lines | ||
| 111 | 109 | // Static Methods |
| 112 | 110 | |
| 113 | 111 | public static AnalogSection Parse(DateTime eventTime, string[] lines, ref int index) |
| 112 | + { | |
| 113 | + return Parse(eventTime, 60.0D, lines, ref index); | |
| 114 | + } | |
| 115 | + | |
| 116 | + public static AnalogSection Parse(DateTime eventTime, double systemFrequency, string[] lines, ref int index) | |
| 114 | 117 | { |
| 115 | 118 | const string CycleHeader = @"^\[\d+\]$"; |
| 116 | 119 | |
| @@ -239,6 +242,7 @@ namespace GSF.SELEventParser · 122 unmodified lines | ||
| 239 | 242 | currentLine = currentLine.Remove(analogEndIndex); |
| 240 | 243 | |
| 241 | 244 | analogs = currentLine |
| 245 | + .Replace("-", " -") | |
| 242 | 246 | .Split((char[])null, StringSplitOptions.RemoveEmptyEntries) |
| 243 | 247 | .TakeWhile(field => double.TryParse(field, out analog)) |
| 244 | 248 | .Select(field => analog) |
| @@ -276,7 +280,7 @@ namespace GSF.SELEventParser · 31 unmodified lines | ||
| 276 | 280 | |
| 277 | 281 | // Determine the time per sample, in ticks |
| 278 | 282 | firstCycleCount = analogSection.AnalogChannels.First().Cycles.First().Samples.Count; |
| 279 | − timePerSample = TimeSpan.TicksPerSecond / (60L * firstCycleCount); | |
| 283 | + timePerSample = TimeSpan.TicksPerSecond / (long)(systemFrequency * firstCycleCount); | |
| 280 | 284 | |
| 281 | 285 | for (int i = 0; i < sampleCount; i++) |
| 282 | 286 | { |
| @@ -287,6 +287,11 @@ namespace GSF.SELEventParser · 286 unmodified lines | ||
| 287 | 287 | // Static Methods |
| 288 | 288 | |
| 289 | 289 | public static CommaSeparatedEventReport Parse(string[] lines, ref int index) |
| 290 | + { | |
| 291 | + return Parse(60.0D, lines, ref index); | |
| 292 | + } | |
| 293 | + | |
| 294 | + public static CommaSeparatedEventReport Parse(double systemFrequency, string[] lines, ref int index) | |
| 290 | 295 | { |
| 291 | 296 | CommaSeparatedEventReport commaSeparatedEventReport = new CommaSeparatedEventReport(); |
| 292 | 297 | commaSeparatedEventReport.Firmware = new Firmware(); |
| @@ -370,7 +375,7 @@ namespace GSF.SELEventParser · 77 unmodified lines | ||
| 370 | 375 | } |
| 371 | 376 | |
| 372 | 377 | commaSeparatedEventReport.InitialReadingIndex = ++index; |
| 373 | − int timeStepTicks = Convert.ToInt32(Math.Round(10000000.0 / commaSeparatedEventReport.AverageFrequency / commaSeparatedEventReport.SamplesPerCycleAnalog)); | |
| 378 | + int timeStepTicks = Convert.ToInt32(Math.Round(10000000.0 / systemFrequency / commaSeparatedEventReport.SamplesPerCycleAnalog)); | |
| 374 | 379 | |
| 375 | 380 | while (!lines[index].ToUpper().Contains("SETTINGS")) |
| 376 | 381 | { |
| @@ -115,6 +115,11 @@ namespace GSF.SELEventParser · 114 unmodified lines | ||
| 115 | 115 | // Static Methods |
| 116 | 116 | |
| 117 | 117 | public static EventFile Parse(string filename) |
| 118 | + { | |
| 119 | + return Parse(filename, 60.0D); | |
| 120 | + } | |
| 121 | + | |
| 122 | + public static EventFile Parse(string filename, double systemFrequency) | |
| 118 | 123 | { |
| 119 | 124 | string[] lineSeparators = { "\r\n", "\n\r", "\r", "\n" }; |
| 120 | 125 | |
| @@ -146,7 +151,7 @@ namespace GSF.SELEventParser · 25 unmodified lines | ||
| 146 | 151 | |
| 147 | 152 | if (command.ToUpper().Contains("EVE")) |
| 148 | 153 | { |
| 149 | − parsedEventReport = EventReport.Parse(lines, ref lineIndex); | |
| 154 | + parsedEventReport = EventReport.Parse(systemFrequency, lines, ref lineIndex); | |
| 150 | 155 | parsedEventReport.Command = command; |
| 151 | 156 | parsedFile.Add(parsedEventReport); |
| 152 | 157 | } |
| @@ -210,6 +210,11 @@ namespace GSF.SELEventParser · 209 unmodified lines | ||
| 210 | 210 | // Static Methods |
| 211 | 211 | |
| 212 | 212 | public static EventReport Parse(string[] lines, ref int index) |
| 213 | + { | |
| 214 | + return Parse(60.0D, lines, ref index); | |
| 215 | + } | |
| 216 | + | |
| 217 | + public static EventReport Parse(double systemFrequency, string[] lines, ref int index) | |
| 213 | 218 | { |
| 214 | 219 | EventReport eventReport = new EventReport(); |
| 215 | 220 | int firmwareIndex; |
| @@ -233,7 +238,7 @@ namespace GSF.SELEventParser · 17 unmodified lines | ||
| 233 | 238 | EventFile.SkipBlanks(lines, ref index); |
| 234 | 239 | |
| 235 | 240 | // Parse the analog section of the report |
| 236 | − eventReport.AnalogSection = AnalogSection.Parse(eventReport.Header.EventTime, lines, ref index); | |
| 241 | + eventReport.AnalogSection = AnalogSection.Parse(eventReport.Header.EventTime, systemFrequency, lines, ref index); | |
| 237 | 242 | |
| 238 | 243 | if (lines.Length < index) |
| 239 | 244 | { |
| @@ -44,6 +44,6 @@ using System.Runtime.InteropServices; · 43 unmodified lines | ||
| 44 | 44 | [assembly: Guid("ee39b8ec-2b03-46f8-9ea8-25bba8e33032")] |
| 45 | 45 | |
| 46 | 46 | // Assembly identity attributes. |
| 47 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 48 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 49 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 47 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 48 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 49 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -62,7 +62,7 @@ using System.Runtime.InteropServices; · 61 unmodified lines | ||
| 62 | 62 | // |
| 63 | 63 | // You can specify all the values or you can default the Build and Revision Numbers |
| 64 | 64 | // by using the '*' as shown below: |
| 65 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 66 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 67 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 65 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 66 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 67 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 68 | 68 | |
| @@ -90,6 +90,16 @@ namespace GSF.TimeSeries.Transport · 89 unmodified lines | ||
| 90 | 90 | /// </summary> |
| 91 | 91 | public const bool DefaultUseMillisecondResolution = true; |
| 92 | 92 | |
| 93 | + /// <summary> | |
| 94 | + /// Default value for <see cref="StartRecoveryBuffer"/>. | |
| 95 | + /// </summary> | |
| 96 | + public const double DefaultStartRecoveryBuffer = -20.0D; | |
| 97 | + | |
| 98 | + /// <summary> | |
| 99 | + /// Default value for <see cref="EndRecoveryBuffer"/>. | |
| 100 | + /// </summary> | |
| 101 | + public const double DefaultEndRecoveryBuffer = 10.0D; | |
| 102 | + | |
| 93 | 103 | // Events |
| 94 | 104 | |
| 95 | 105 | /// <summary> |
| @@ -160,6 +170,8 @@ namespace GSF.TimeSeries.Transport · 64 unmodified lines | ||
| 160 | 170 | m_recoveryStartDelay = DefaultRecoveryStartDelay; |
| 161 | 171 | m_minimumRecoverySpan = DefaultMinimumRecoverySpan; |
| 162 | 172 | m_maximumRecoverySpan = DefaultMaximumRecoverySpan; |
| 173 | + StartRecoveryBuffer = DefaultStartRecoveryBuffer; | |
| 174 | + EndRecoveryBuffer = DefaultEndRecoveryBuffer; | |
| 163 | 175 | |
| 164 | 176 | string loggingPath = FilePath.GetDirectoryName(FilePath.GetAbsolutePath(DataSubscriber.DefaultLoggingPath)); |
| 165 | 177 | |
| @@ -451,6 +463,24 @@ namespace GSF.TimeSeries.Transport · 285 unmodified lines | ||
| 451 | 463 | } |
| 452 | 464 | } |
| 453 | 465 | |
| 466 | + /// <summary> | |
| 467 | + /// Gets or sets start buffer time, in seconds, to add to start of outage window to ensure all missing data is recovered. | |
| 468 | + /// </summary> | |
| 469 | + public double StartRecoveryBuffer | |
| 470 | + { | |
| 471 | + get; | |
| 472 | + set; | |
| 473 | + } | |
| 474 | + | |
| 475 | + /// <summary> | |
| 476 | + /// Gets or sets end buffer time, in seconds, to add to end of outage window to ensure all missing data is recovered. | |
| 477 | + /// </summary> | |
| 478 | + public double EndRecoveryBuffer | |
| 479 | + { | |
| 480 | + get; | |
| 481 | + set; | |
| 482 | + } | |
| 483 | + | |
| 454 | 484 | /// <summary> |
| 455 | 485 | /// Gets or sets any additional constraint parameters that will be supplied to adapters in temporal |
| 456 | 486 | /// subscription used when recovering data for an <see cref="Outage"/>. |
| @@ -546,6 +576,10 @@ namespace GSF.TimeSeries.Transport · 89 unmodified lines | ||
| 546 | 576 | status.AppendLine(); |
| 547 | 577 | status.AppendFormat("Use millisecond resolution: {0}", UseMillisecondResolution); |
| 548 | 578 | status.AppendLine(); |
| 579 | + status.AppendFormat(" Start recovery buffer: {0:N2} seconds", StartRecoveryBuffer); | |
| 580 | + status.AppendLine(); | |
| 581 | + status.AppendFormat(" End recovery buffer: {0:N2} seconds", EndRecoveryBuffer); | |
| 582 | + status.AppendLine(); | |
| 549 | 583 | status.AppendFormat(" Logging path: {0}", FilePath.TrimFileName(m_loggingPath.ToNonNullNorWhiteSpace(FilePath.GetAbsolutePath("")), 51)); |
| 550 | 584 | status.AppendLine(); |
| 551 | 585 | |
| @@ -682,6 +716,12 @@ namespace GSF.TimeSeries.Transport · 130 unmodified lines | ||
| 682 | 716 | if (settings.TryGetValue("useMillisecondResolution", out setting)) |
| 683 | 717 | UseMillisecondResolution = setting.ParseBoolean(); |
| 684 | 718 | |
| 719 | + if (settings.TryGetValue("startRecoveryBuffer", out setting) && double.TryParse(setting, out timeInterval)) | |
| 720 | + StartRecoveryBuffer = timeInterval; | |
| 721 | + | |
| 722 | + if (settings.TryGetValue("endRecoveryBuffer", out setting) && double.TryParse(setting, out timeInterval)) | |
| 723 | + EndRecoveryBuffer = timeInterval; | |
| 724 | + | |
| 685 | 725 | // Get logging path, if any has been defined |
| 686 | 726 | if (settings.TryGetValue("loggingPath", out setting)) |
| 687 | 727 | { |
| @@ -716,7 +756,7 @@ namespace GSF.TimeSeries.Transport · 28 unmodified lines | ||
| 716 | 756 | m_dataGapLog.Initialize(); |
| 717 | 757 | |
| 718 | 758 | // Setup data gap processor to process items one at a time, a 5-second minimum period is established between each gap processing |
| 719 | − m_dataGapLogProcessor = new OutageLogProcessor(m_dataGapLog, ProcessDataGap, CanProcessDataGap, ex => OnProcessException(MessageLevel.Warning, ex), GSF.Common.Max(5000, (int)(m_recoveryStartDelay * SI.Milli))); | |
| 759 | + m_dataGapLogProcessor = new OutageLogProcessor(m_dataGapLog, ProcessDataGap, CanProcessDataGap, ex => OnProcessException(MessageLevel.Warning, ex), GSF.Common.Max(5000, (int)(m_recoveryStartDelay * 1000.0D))); | |
| 720 | 760 | } |
| 721 | 761 | |
| 722 | 762 | /// <summary> |
| @@ -745,7 +785,7 @@ namespace GSF.TimeSeries.Transport · 22 unmodified lines | ||
| 745 | 785 | if (dataGapSpan >= m_minimumRecoverySpan && dataGapSpan <= m_maximumRecoverySpan) |
| 746 | 786 | { |
| 747 | 787 | // Since local clock may float we add some buffer around recovery window |
| 748 | − m_dataGapLog.Add(new Outage(startTime.AddSeconds(-10.0D), endTime.AddSeconds(10.0D))); | |
| 788 | + m_dataGapLog.Add(new Outage(startTime.AddSeconds(StartRecoveryBuffer), endTime.AddSeconds(EndRecoveryBuffer))); | |
| 749 | 789 | return true; |
| 750 | 790 | } |
| 751 | 791 | |
| @@ -794,14 +834,18 @@ namespace GSF.TimeSeries.Transport · 42 unmodified lines | ||
| 794 | 834 | /// <returns><c>true</c> if log was flushed successfully; otherwise, <c>false</c> if flush timed out.</returns> |
| 795 | 835 | public bool FlushLog(int timeout = Timeout.Infinite) |
| 796 | 836 | { |
| 797 | − if (m_disposed) | |
| 798 | − throw new InvalidOperationException("Data gap recoverer has been disposed. Cannot flush log."); | |
| 799 | − | |
| 800 | − // Wait for process completion if in progress | |
| 801 | − if (m_dataGapRecoveryCompleted.Wait(timeout)) | |
| 802 | − return m_dataGapLog?.Flush().Wait(timeout) ?? false; | |
| 837 | + try | |
| 838 | + { | |
| 839 | + // Wait for process completion if in progress | |
| 840 | + if (!m_disposed && m_dataGapRecoveryCompleted.Wait(timeout)) | |
| 841 | + return m_dataGapLog?.Flush().Wait(timeout) ?? false; | |
| 803 | 842 | |
| 804 | − return false; | |
| 843 | + return false; | |
| 844 | + } | |
| 845 | + catch | |
| 846 | + { | |
| 847 | + return false; | |
| 848 | + } | |
| 805 | 849 | } |
| 806 | 850 | |
| 807 | 851 | // Can only start data gap processing when end time of recovery range is beyond recovery start delay |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -76,7 +76,7 @@ using System.Windows; · 75 unmodified lines | ||
| 76 | 76 | // |
| 77 | 77 | // You can specify all the values or you can default the Build and Revision Numbers |
| 78 | 78 | // by using the '*' as shown below: |
| 79 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 80 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 81 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 82 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 79 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 80 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 81 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 82 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -4,8 +4,8 @@ using System.Resources; · 3 unmodified lines | ||
| 4 | 4 | using System.Runtime.InteropServices; |
| 5 | 5 | |
| 6 | 6 | // Assembly identity attributes. |
| 7 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 8 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 7 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 8 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 9 | 9 | |
| 10 | 10 | // Informational attributes. |
| 11 | 11 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -27,8 +27,8 @@ using System.Web.UI; · 26 unmodified lines | ||
| 27 | 27 | using GSF.Web.Hosting; |
| 28 | 28 | |
| 29 | 29 | // Assembly identity attributes. |
| 30 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 31 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 30 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 31 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 32 | 32 | |
| 33 | 33 | // Informational attributes. |
| 34 | 34 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -30,6 +30,6 @@ using System.Runtime.InteropServices; · 29 unmodified lines | ||
| 30 | 30 | // |
| 31 | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | 32 | // by using the '*' as shown below: |
| 33 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 33 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | ||
| 59 | 59 | // |
| 60 | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | 61 | // by using the '*' as shown below: |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | ||
| 59 | 59 | // |
| 60 | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | 61 | // by using the '*' as shown below: |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -26,8 +26,8 @@ using System.Reflection; · 25 unmodified lines | ||
| 26 | 26 | using System.Runtime.InteropServices; |
| 27 | 27 | |
| 28 | 28 | // Assembly identity attributes. |
| 29 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 30 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 29 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 30 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 31 | 31 | |
| 32 | 32 | // Informational attributes. |
| 33 | 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | ||
| 59 | 59 | // |
| 60 | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | 61 | // by using the '*' as shown below: |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | ||
| 59 | 59 | // |
| 60 | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | 61 | // by using the '*' as shown below: |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | ||
| 59 | 59 | // |
| 60 | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | 61 | // by using the '*' as shown below: |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | ||
| 59 | 59 | // |
| 60 | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | 61 | // by using the '*' as shown below: |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | ||
| 59 | 59 | // |
| 60 | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | 61 | // by using the '*' as shown below: |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | ||
| 59 | 59 | // |
| 60 | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | 61 | // by using the '*' as shown below: |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -50,6 +50,6 @@ using System.Windows; · 49 unmodified lines | ||
| 50 | 50 | // |
| 51 | 51 | // You can specify all the values or you can default the Build and Revision Numbers |
| 52 | 52 | // by using the '*' as shown below: |
| 53 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 54 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 55 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 53 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 54 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 55 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | ||
| 30 | 30 | // |
| 31 | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | 32 | // by using the '*' as shown below: |
| 33 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 36 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 33 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 36 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | ||
| 30 | 30 | // |
| 31 | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | 32 | // by using the '*' as shown below: |
| 33 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 36 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 33 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 36 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -26,8 +26,8 @@ using System.Reflection; · 25 unmodified lines | ||
| 26 | 26 | using System.Runtime.InteropServices; |
| 27 | 27 | |
| 28 | 28 | // Assembly identity attributes. |
| 29 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 30 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 29 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 30 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 31 | 31 | |
| 32 | 32 | // Informational attributes. |
| 33 | 33 | [assembly: AssemblyTitle("HistorianPlaybackUtility")] |
| @@ -75,7 +75,7 @@ using System.Windows; · 74 unmodified lines | ||
| 75 | 75 | // |
| 76 | 76 | // You can specify all the values or you can default the Build and Revision Numbers |
| 77 | 77 | // by using the '*' as shown below: |
| 78 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 79 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 80 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 81 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 78 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 79 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 80 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 81 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -30,6 +30,6 @@ using System.Runtime.InteropServices; · 29 unmodified lines | ||
| 30 | 30 | // |
| 31 | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | 32 | // by using the '*' as shown below: |
| 33 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 33 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| @@ -28,7 +28,7 @@ using System.Runtime.InteropServices; · 27 unmodified lines | ||
| 28 | 28 | // |
| 29 | 29 | // You can specify all the values or you can default the Build and Revision Numbers |
| 30 | 30 | // by using the '*' as shown below: |
| 31 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 32 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 33 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 31 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 32 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 33 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -50,7 +50,7 @@ using System.Runtime.InteropServices; · 49 unmodified lines | ||
| 50 | 50 | // |
| 51 | 51 | // You can specify all the values or you can default the Build and Revision Numbers |
| 52 | 52 | // by using the '*' as shown below: |
| 53 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 54 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 55 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 56 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 53 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 54 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 55 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 56 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | ||
| 58 | 58 | // |
| 59 | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | 60 | // by using the '*' as shown below: |
| 61 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 62 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 61 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 62 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -31,8 +31,8 @@ using System.Runtime.InteropServices; · 30 unmodified lines | ||
| 31 | 31 | // |
| 32 | 32 | // You can specify all the values or you can default the Build and Revision Numbers |
| 33 | 33 | // by using the '*' as shown below: |
| 34 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 36 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 37 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 34 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 36 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 37 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 38 | 38 | [assembly: NeutralResourcesLanguage("en-US")] |
| @@ -59,7 +59,7 @@ using System.Runtime.InteropServices; · 58 unmodified lines | ||
| 59 | 59 | // |
| 60 | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | 61 | // by using the '*' as shown below: |
| 62 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 65 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 62 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 65 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -59,7 +59,7 @@ using System.Runtime.InteropServices; · 58 unmodified lines | ||
| 59 | 59 | // |
| 60 | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | 61 | // by using the '*' as shown below: |
| 62 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 63 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 64 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 65 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 62 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 63 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 64 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 65 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | ||
| 25 | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | |
| 27 | 27 | // Assembly identity attributes. |
| 28 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 29 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 28 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 29 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |
| 30 | 30 | |
| 31 | 31 | // Informational attributes. |
| 32 | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | ||
| 30 | 30 | // |
| 31 | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | 32 | // by using the '*' as shown below: |
| 33 | −// [assembly: AssemblyVersion("2.1.465.0")] | |
| 34 | −[assembly: AssemblyVersion("2.1.465.0")] | |
| 35 | −[assembly: AssemblyFileVersion("2.1.465.0")] | |
| 36 | −[assembly: AssemblyInformationalVersion("2.1.465-beta")] | |
| 33 | +// [assembly: AssemblyVersion("2.2.8.0")] | |
| 34 | +[assembly: AssemblyVersion("2.2.8.0")] | |
| 35 | +[assembly: AssemblyFileVersion("2.2.8.0")] | |
| 36 | +[assembly: AssemblyInformationalVersion("2.2.8-beta")] | |