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 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 63 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 63 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 64 | 64 | ||
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | |||
| 30 | // | 30 | // |
| 31 | // You can specify all the values or you can default the Build and Revision Numbers | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | // by using the '*' as shown below: | 32 | // by using the '*' as shown below: |
| 33 | // [assembly: AssemblyVersion("2.1.465.0")] | 33 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyVersion("2.1.465.0")] | 34 | [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyFileVersion("2.1.465.0")] | 35 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 36 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 36 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -76,7 +76,7 @@ using System.Windows; · 75 unmodified lines | |||
| 76 | // | 76 | // |
| 77 | // You can specify all the values or you can default the Build and Revision Numbers | 77 | // You can specify all the values or you can default the Build and Revision Numbers |
| 78 | // by using the '*' as shown below: | 78 | // by using the '*' as shown below: |
| 79 | // [assembly: AssemblyVersion("2.1.465.0")] | 79 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 80 | [assembly: AssemblyVersion("2.1.465.0")] | 80 | [assembly: AssemblyVersion("2.2.8.0")] |
| 81 | [assembly: AssemblyFileVersion("2.1.465.0")] | 81 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 82 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 82 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -76,7 +76,7 @@ using System.Windows; · 75 unmodified lines | |||
| 76 | // | 76 | // |
| 77 | // You can specify all the values or you can default the Build and Revision Numbers | 77 | // You can specify all the values or you can default the Build and Revision Numbers |
| 78 | // by using the '*' as shown below: | 78 | // by using the '*' as shown below: |
| 79 | // [assembly: AssemblyVersion("2.1.465.0")] | 79 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 80 | [assembly: AssemblyVersion("2.1.465.0")] | 80 | [assembly: AssemblyVersion("2.2.8.0")] |
| 81 | [assembly: AssemblyFileVersion("2.1.465.0")] | 81 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 82 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 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 | * Signature: `Top(N|N%, [normalizeTime], expression)` | 209 | * Signature: `Top(N|N%, [normalizeTime], expression)` |
| 210 | * Example: `Top(50%, FILTER ActiveMeasurements WHERE SignalType='FREQ')` | 210 | * Example: `Top(50%, FILTER ActiveMeasurements WHERE SignalType='FREQ')` |
| 211 | * Variants: `Top` | 211 | * Variants: `Top`, `Largest` |
| 212 | * Execution: Immediate in-memory array load | 212 | * Execution: Immediate in-memory array load |
| 213 | 213 | ||
| 214 | ## Bottom | 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 | * Signature: `Bottom(N|N%, [normalizeTime], expression)` | 221 | * Signature: `Bottom(N|N%, [normalizeTime], expression)` |
| 222 | * Example: `Bottom(100, false, FILTER ActiveMeasurements WHERE SignalType='FREQ')` | 222 | * Example: `Bottom(100, false, FILTER ActiveMeasurements WHERE SignalType='FREQ')` |
| 223 | * Variants: `Bottom`, `Bot` | 223 | * Variants: `Bottom`, `Bot`, `Smallest` |
| 224 | * Execution: Immediate in-memory array load | 224 | * Execution: Immediate in-memory array load |
| 225 | 225 | ||
| 226 | ## Random | 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 | * Signature: `TimeDifference(expression)` | 283 | * Signature: `TimeDifference(expression)` |
| 284 | * Example: `TimeDifference(FILTER ActiveMeasurements WHERE SignalType='FREQ')` | 284 | * Example: `TimeDifference(FILTER ActiveMeasurements WHERE SignalType='FREQ')` |
| 285 | * Variants: `TimeDifference`, `TimeDiff` | 285 | * Variants: `TimeDifference`, `TimeDiff`, `Elapsed` |
| 286 | * Execution: Deferred enumeration | 286 | * Execution: Deferred enumeration |
| 287 | 287 | ||
| 288 | ## Derivative | 288 | ## Derivative |
| @@ -29,6 +29,6 @@ Imports System.Runtime.InteropServices · 28 unmodified lines | |||
| 29 | ' | 29 | ' |
| 30 | ' You can specify all the values or you can default the Build and Revision Numbers | 30 | ' You can specify all the values or you can default the Build and Revision Numbers |
| 31 | ' by using the '*' as shown below: | 31 | ' by using the '*' as shown below: |
| 32 | ' [assembly: AssemblyVersion("2.1.465.0")] | 32 | ' [assembly: AssemblyVersion("2.2.8.0")] |
| 33 | <Assembly: AssemblyVersion("2.1.465.0")> | 33 | <Assembly: AssemblyVersion("2.2.8.0")> |
| 34 | <Assembly: AssemblyFileVersion("2.1.465.0")> | 34 | <Assembly: AssemblyFileVersion("2.2.8.0")> |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -59,7 +59,7 @@ using System.Runtime.InteropServices; · 58 unmodified lines | |||
| 59 | // | 59 | // |
| 60 | // You can specify all the values or you can default the Build and Revision Numbers | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | // by using the '*' as shown below: | 61 | // by using the '*' as shown below: |
| 62 | // [assembly: AssemblyVersion("2.1.465.0")] | 62 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyVersion("2.1.465.0")] | 63 | [assembly: AssemblyVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyFileVersion("2.1.465.0")] | 64 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 65 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 65 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | |||
| 30 | // | 30 | // |
| 31 | // You can specify all the values or you can default the Build and Revision Numbers | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | // by using the '*' as shown below: | 32 | // by using the '*' as shown below: |
| 33 | // [assembly: AssemblyVersion("2.1.465.0")] | 33 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyVersion("2.1.465.0")] | 34 | [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyFileVersion("2.1.465.0")] | 35 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 36 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 36 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -54,7 +54,7 @@ namespace GrafanaAdapters · 53 unmodified lines | |||
| 54 | m_baseTicks = UnixTimeTag.BaseTicks.Value; | 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 | return m_parent.Archive.ReadData(targetMap.Keys.Select(pointID => (int)pointID), startTime, stopTime, false).Select(dataPoint => new DataSourceValue | 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 | /// <remarks> | 238 | /// <remarks> |
| 239 | /// Signature: <c>Top(N|N%, [normalizeTime], expression)</c><br/> | 239 | /// Signature: <c>Top(N|N%, [normalizeTime], expression)</c><br/> |
| 240 | /// Example: <c>Top(50%, FILTER ActiveMeasurements WHERE SignalType='FREQ')</c><br/> | 240 | /// Example: <c>Top(50%, FILTER ActiveMeasurements WHERE SignalType='FREQ')</c><br/> |
| 241 | /// Variants: Top<br/> | 241 | /// Variants: Top, Largest<br/> |
| 242 | /// Execution: Immediate in-memory array load. | 242 | /// Execution: Immediate in-memory array load. |
| 243 | /// </remarks> | 243 | /// </remarks> |
| 244 | Top, | 244 | Top, |
| @@ -251,7 +251,7 @@ namespace GrafanaAdapters · 6 unmodified lines | |||
| 251 | /// <remarks> | 251 | /// <remarks> |
| 252 | /// Signature: <c>Bottom(N|N%, [normalizeTime], expression)</c><br/> | 252 | /// Signature: <c>Bottom(N|N%, [normalizeTime], expression)</c><br/> |
| 253 | /// Example: <c>Bottom(100, false, FILTER ActiveMeasurements WHERE SignalType='FREQ')</c><br/> | 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 | /// Execution: Immediate in-memory array load. | 255 | /// Execution: Immediate in-memory array load. |
| 256 | /// </remarks> | 256 | /// </remarks> |
| 257 | Bottom, | 257 | Bottom, |
| @@ -319,7 +319,7 @@ namespace GrafanaAdapters · 61 unmodified lines | |||
| 319 | /// <remarks> | 319 | /// <remarks> |
| 320 | /// Signature: <c>TimeDifference(expression)</c><br/> | 320 | /// Signature: <c>TimeDifference(expression)</c><br/> |
| 321 | /// Example: <c>TimeDifference(FILTER ActiveMeasurements WHERE SignalType='FREQ')</c><br/> | 321 | /// Example: <c>TimeDifference(FILTER ActiveMeasurements WHERE SignalType='FREQ')</c><br/> |
| 322 | /// Variants: TimeDifference, TimeDiff<br/> | 322 | /// Variants: TimeDifference, TimeDiff, Elapsed<br/> |
| 323 | /// Execution: Deferred enumeration. | 323 | /// Execution: Deferred enumeration. |
| 324 | /// </remarks> | 324 | /// </remarks> |
| 325 | TimeDifference, | 325 | TimeDifference, |
| @@ -463,7 +463,7 @@ namespace GrafanaAdapters · 137 unmodified lines | |||
| 463 | DateTime stopTime = request.range.to.ParseJsonTimestamp(); | 463 | DateTime stopTime = request.range.to.ParseJsonTimestamp(); |
| 464 | int maxDataPoints = (int)(request.maxDataPoints * 1.05D); | 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 | // Establish result series sequentially so that order remains consistent between calls | 468 | // Establish result series sequentially so that order remains consistent between calls |
| 469 | List<TimeSeriesValues> result = valueGroups.Select(valueGroup => new TimeSeriesValues { target = valueGroup.Target }).ToList(); | 469 | List<TimeSeriesValues> result = valueGroups.Select(valueGroup => new TimeSeriesValues { target = valueGroup.Target }).ToList(); |
| @@ -493,12 +493,13 @@ namespace GrafanaAdapters · 23 unmodified lines | |||
| 493 | /// </summary> | 493 | /// </summary> |
| 494 | /// <param name="startTime">Start-time for query.</param> | 494 | /// <param name="startTime">Start-time for query.</param> |
| 495 | /// <param name="stopTime">Stop-time for query.</param> | 495 | /// <param name="stopTime">Stop-time for query.</param> |
| 496 | /// <param name="interval">Interval from Grafana request.</param> | ||
| 496 | /// <param name="decimate">Flag that determines if data should be decimated over provided time range.</param> | 497 | /// <param name="decimate">Flag that determines if data should be decimated over provided time range.</param> |
| 497 | /// <param name="targetMap">Set of IDs with associated targets to query.</param> | 498 | /// <param name="targetMap">Set of IDs with associated targets to query.</param> |
| 498 | /// <returns>Queried data source data in terms of value and time.</returns> | 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 | // A single target might look like the following: | 504 | // A single target might look like the following: |
| 504 | // 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)) | 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 | // Execute series functions | 541 | // Execute series functions |
| 541 | foreach (Tuple<SeriesFunction, string, bool> parsedFunction in seriesFunctions.Select(ParseSeriesFunction)) | 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 | yield return valueGroup; | 544 | yield return valueGroup; |
| 544 | 545 | ||
| 545 | // Use reduced target set that excludes any series functions | 546 | // Use reduced target set that excludes any series functions |
| @@ -572,7 +573,7 @@ namespace GrafanaAdapters · 26 unmodified lines | |||
| 572 | long readCount = 0; | 573 | long readCount = 0; |
| 573 | 574 | ||
| 574 | // Query underlying data source for each target - to prevent parallel read from data source we enumerate immediately | 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 | .TakeWhile(dataValue => readCount++ % 10000 != 0 || !cancellationToken.IsCancellationRequested).ToList(); | 577 | .TakeWhile(dataValue => readCount++ % 10000 != 0 || !cancellationToken.IsCancellationRequested).ToList(); |
| 577 | 578 | ||
| 578 | foreach (KeyValuePair<ulong, string> target in targetMap) | 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 | SeriesFunction seriesFunction = parsedFunction.Item1; | 590 | SeriesFunction seriesFunction = parsedFunction.Item1; |
| 590 | string expression = parsedFunction.Item2; | 591 | string expression = parsedFunction.Item2; |
| @@ -660,7 +661,7 @@ namespace GrafanaAdapters · 69 unmodified lines | |||
| 660 | decimate = false; | 661 | decimate = false; |
| 661 | 662 | ||
| 662 | // Query function expression to get series data | 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 | if (setOperation) | 666 | if (setOperation) |
| 666 | { | 667 | { |
| @@ -756,8 +757,8 @@ namespace GrafanaAdapters · 89 unmodified lines | |||
| 756 | s_standardDeviationSampleExpression = new Regex(string.Format(GetExpression, "(StandardDeviationSample|StdDevSamp)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); | 757 | s_standardDeviationSampleExpression = new Regex(string.Format(GetExpression, "(StandardDeviationSample|StdDevSamp)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| 757 | s_medianExpression = new Regex(string.Format(GetExpression, "(Median|Med|Mid)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); | 758 | s_medianExpression = new Regex(string.Format(GetExpression, "(Median|Med|Mid)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| 758 | s_modeExpression = new Regex(string.Format(GetExpression, "Mode"), RegexOptions.Compiled | RegexOptions.IgnoreCase); | 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_topExpression = new Regex(string.Format(GetExpression, "(Top|Largest)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| 760 | s_bottomExpression = new Regex(string.Format(GetExpression, "(Bottom|Bot)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); | 761 | s_bottomExpression = new Regex(string.Format(GetExpression, "(Bottom|Bot|Smallest)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| 761 | s_randomExpression = new Regex(string.Format(GetExpression, "(Random|Rand|Sample)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); | 762 | s_randomExpression = new Regex(string.Format(GetExpression, "(Random|Rand|Sample)"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| 762 | s_firstExpression = new Regex(string.Format(GetExpression, "First"), RegexOptions.Compiled | RegexOptions.IgnoreCase); | 763 | s_firstExpression = new Regex(string.Format(GetExpression, "First"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| 763 | s_lastExpression = new Regex(string.Format(GetExpression, "Last"), RegexOptions.Compiled | RegexOptions.IgnoreCase); | 764 | s_lastExpression = new Regex(string.Format(GetExpression, "Last"), RegexOptions.Compiled | RegexOptions.IgnoreCase); |
| @@ -26,8 +26,8 @@ using System.Reflection; · 25 unmodified lines | |||
| 26 | using System.Runtime.InteropServices; | 26 | using System.Runtime.InteropServices; |
| 27 | 27 | ||
| 28 | // Assembly identity attributes. | 28 | // Assembly identity attributes. |
| 29 | [assembly: AssemblyVersion("2.1.465.0")] | 29 | [assembly: AssemblyVersion("2.2.8.0")] |
| 30 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 30 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 31 | 31 | ||
| 32 | // Informational attributes. | 32 | // Informational attributes. |
| 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -26,8 +26,8 @@ using System.Reflection; · 25 unmodified lines | |||
| 26 | using System.Runtime.InteropServices; | 26 | using System.Runtime.InteropServices; |
| 27 | 27 | ||
| 28 | // Assembly identity attributes. | 28 | // Assembly identity attributes. |
| 29 | [assembly: AssemblyVersion("2.1.465.0")] | 29 | [assembly: AssemblyVersion("2.2.8.0")] |
| 30 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 30 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 31 | 31 | ||
| 32 | // Informational attributes. | 32 | // Informational attributes. |
| 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | |||
| 30 | // | 30 | // |
| 31 | // You can specify all the values or you can default the Build and Revision Numbers | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | // by using the '*' as shown below: | 32 | // by using the '*' as shown below: |
| 33 | // [assembly: AssemblyVersion("2.1.465.0")] | 33 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyVersion("2.1.465.0")] | 34 | [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyFileVersion("2.1.465.0")] | 35 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 36 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 36 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -46,6 +46,6 @@ using System.Runtime.InteropServices; · 45 unmodified lines | |||
| 46 | [assembly: Guid("D8064F6E-0B5D-4CBB-884E-75A2E11CA779")] | 46 | [assembly: Guid("D8064F6E-0B5D-4CBB-884E-75A2E11CA779")] |
| 47 | 47 | ||
| 48 | // Assembly identity attributes. | 48 | // Assembly identity attributes. |
| 49 | [assembly: AssemblyVersion("2.1.465.0")] | 49 | [assembly: AssemblyVersion("2.2.8.0")] |
| 50 | [assembly: AssemblyFileVersion("2.1.465.0")] | 50 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 51 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 51 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | |||
| 30 | // | 30 | // |
| 31 | // You can specify all the values or you can default the Build and Revision Numbers | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | // by using the '*' as shown below: | 32 | // by using the '*' as shown below: |
| 33 | // [assembly: AssemblyVersion("2.1.465.0")] | 33 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyVersion("2.1.465.0")] | 34 | [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyFileVersion("2.1.465.0")] | 35 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 36 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 36 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | |||
| 30 | // | 30 | // |
| 31 | // You can specify all the values or you can default the Build and Revision Numbers | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | // by using the '*' as shown below: | 32 | // by using the '*' as shown below: |
| 33 | // [assembly: AssemblyVersion("2.1.465.0")] | 33 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyVersion("2.1.465.0")] | 34 | [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyFileVersion("2.1.465.0")] | 35 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 36 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 36 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -26,8 +26,8 @@ using System.Reflection; · 25 unmodified lines | |||
| 26 | using System.Runtime.InteropServices; | 26 | using System.Runtime.InteropServices; |
| 27 | 27 | ||
| 28 | // Assembly identity attributes. | 28 | // Assembly identity attributes. |
| 29 | [assembly: AssemblyVersion("2.1.465.0")] | 29 | [assembly: AssemblyVersion("2.2.8.0")] |
| 30 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 30 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 31 | 31 | ||
| 32 | // Informational attributes. | 32 | // Informational attributes. |
| 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -57,7 +57,7 @@ using System.Runtime.InteropServices; · 56 unmodified lines | |||
| 57 | // | 57 | // |
| 58 | // You can specify all the values or you can default the Build and Revision Numbers | 58 | // You can specify all the values or you can default the Build and Revision Numbers |
| 59 | // by using the '*' as shown below: | 59 | // by using the '*' as shown below: |
| 60 | // [assembly: AssemblyVersion("2.1.465.0")] | 60 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 61 | [assembly: AssemblyVersion("2.1.465.0")] | 61 | [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyFileVersion("2.1.465.0")] | 62 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 63 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -28,10 +28,10 @@ using System.Runtime.CompilerServices; · 27 unmodified lines | |||
| 28 | using System.Runtime.InteropServices; | 28 | using System.Runtime.InteropServices; |
| 29 | 29 | ||
| 30 | // Assembly identity attributes. | 30 | // Assembly identity attributes. |
| 31 | [assembly: AssemblyVersion("2.1.465.0")] | 31 | [assembly: AssemblyVersion("2.2.8.0")] |
| 32 | 32 | ||
| 33 | [assembly: SuppressMessage("Microsoft.Usage", "CA2243:AttributeStringLiteralsShouldParseCorrectly")] | 33 | [assembly: SuppressMessage("Microsoft.Usage", "CA2243:AttributeStringLiteralsShouldParseCorrectly")] |
| 34 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 34 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 35 | 35 | ||
| 36 | // Informational attributes. | 36 | // Informational attributes. |
| 37 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 37 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -71,6 +71,38 @@ namespace GSF · 70 unmodified lines | |||
| 71 | 71 | ||
| 72 | #region [ Methods ] | 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 | /// <summary> | 106 | /// <summary> |
| 75 | /// Determines whether the range overlaps with the given range. | 107 | /// Determines whether the range overlaps with the given range. |
| 76 | /// </summary> | 108 | /// </summary> |
| @@ -57,7 +57,7 @@ using System.Runtime.InteropServices; · 56 unmodified lines | |||
| 57 | // | 57 | // |
| 58 | // You can specify all the values or you can default the Build and Revision Numbers | 58 | // You can specify all the values or you can default the Build and Revision Numbers |
| 59 | // by using the '*' as shown below: | 59 | // by using the '*' as shown below: |
| 60 | // [assembly: AssemblyVersion("2.1.465.0")] | 60 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 61 | [assembly: AssemblyVersion("2.1.465.0")] | 61 | [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyFileVersion("2.1.465.0")] | 62 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 63 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -30,6 +30,6 @@ using System.Runtime.InteropServices; · 29 unmodified lines | |||
| 30 | // | 30 | // |
| 31 | // You can specify all the values or you can default the Build and Revision Numbers | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | // by using the '*' as shown below: | 32 | // by using the '*' as shown below: |
| 33 | // [assembly: AssemblyVersion("2.1.465.0")] | 33 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyVersion("2.1.465.0")] | 34 | [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyFileVersion("2.1.465.0")] | 35 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| @@ -230,7 +230,7 @@ namespace GSF.Historian.Files · 229 unmodified lines | |||
| 230 | 230 | ||
| 231 | buffer.ValidateParameters(startIndex, length); | 231 | buffer.ValidateParameters(startIndex, length); |
| 232 | 232 | ||
| 233 | LittleEndian.CopyBytes(Time.Value, buffer, startIndex); | 233 | LittleEndian.CopyBytes((double)Time.Value, buffer, startIndex); |
| 234 | LittleEndian.CopyBytes(Flags, buffer, startIndex + 8); | 234 | LittleEndian.CopyBytes(Flags, buffer, startIndex + 8); |
| 235 | LittleEndian.CopyBytes(Value, buffer, startIndex + 12); | 235 | LittleEndian.CopyBytes(Value, buffer, startIndex + 12); |
| 236 | 236 | ||
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -52,7 +52,7 @@ using System.Runtime.InteropServices; · 51 unmodified lines | |||
| 52 | // | 52 | // |
| 53 | // You can specify all the values or you can default the Build and Revision Numbers | 53 | // You can specify all the values or you can default the Build and Revision Numbers |
| 54 | // by using the '*' as shown below: | 54 | // by using the '*' as shown below: |
| 55 | // [assembly: AssemblyVersion("2.1.465.0")] | 55 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 56 | [assembly: AssemblyVersion("2.1.465.0")] | 56 | [assembly: AssemblyVersion("2.2.8.0")] |
| 57 | [assembly: AssemblyFileVersion("2.1.465.0")] | 57 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 58 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 58 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -46,6 +46,7 @@ · 45 unmodified lines | |||
| 46 | using System; | 46 | using System; |
| 47 | using System.ComponentModel; | 47 | using System.ComponentModel; |
| 48 | using System.Drawing; | 48 | using System.Drawing; |
| 49 | using System.Net; | ||
| 49 | 50 | ||
| 50 | // This FTP library is based on a similar C# library found on "The Code Project" web site originally written by | 51 | // This FTP library is based on a similar C# library found on "The Code Project" web site originally written by |
| 51 | // Alex Kwok (no license specified), then enhanced by Uwe Keim (licensed under The Code Project Open License). | 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 | /// <summary> | 319 | /// <summary> |
| 248 | /// Gets or sets current FTP session directory. | 320 | /// Gets or sets current FTP session directory. |
| 249 | /// </summary> | 321 | /// </summary> |
| @@ -46,9 +46,12 @@ · 45 unmodified lines | |||
| 46 | using System; | 46 | using System; |
| 47 | using System.Collections; | 47 | using System.Collections; |
| 48 | using System.IO; | 48 | using System.IO; |
| 49 | using System.Linq; | ||
| 50 | using System.Net; | ||
| 49 | using System.Net.Sockets; | 51 | using System.Net.Sockets; |
| 50 | using System.Text; | 52 | using System.Text; |
| 51 | using System.Text.RegularExpressions; | 53 | using System.Text.RegularExpressions; |
| 54 | using System.Threading; | ||
| 52 | 55 | ||
| 53 | namespace GSF.Net.Ftp | 56 | namespace GSF.Net.Ftp |
| 54 | { | 57 | { |
| @@ -89,6 +92,10 @@ namespace GSF.Net.Ftp · 34 unmodified lines | |||
| 89 | private string m_server; | 92 | private string m_server; |
| 90 | private int m_port; | 93 | private int m_port; |
| 91 | private int m_timeout; | 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 | private TransferMode m_currentTransferMode; | 99 | private TransferMode m_currentTransferMode; |
| 93 | private FtpResponse m_lastResponse; | 100 | private FtpResponse m_lastResponse; |
| 94 | private bool m_disposed; | 101 | private bool m_disposed; |
| @@ -103,6 +110,7 @@ namespace GSF.Net.Ftp · 8 unmodified lines | |||
| 103 | m_server = "localhost"; | 110 | m_server = "localhost"; |
| 104 | m_port = 21; | 111 | m_port = 21; |
| 105 | m_timeout = 30000; | 112 | m_timeout = 30000; |
| 113 | m_passive = true; | ||
| 106 | m_sessionHost = host; | 114 | m_sessionHost = host; |
| 107 | m_currentTransferMode = TransferMode.Unknown; | 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 | /// <summary> | 214 | /// <summary> |
| 162 | /// Last response from control channel. | 215 | /// Last response from control channel. |
| 163 | /// </summary> | 216 | /// </summary> |
| @@ -400,7 +453,7 @@ namespace GSF.Net.Ftp · 236 unmodified lines | |||
| 400 | try | 453 | try |
| 401 | { | 454 | { |
| 402 | Type(TransferMode.Ascii); | 455 | Type(TransferMode.Ascii); |
| 403 | FtpDataStream dataStream = GetPassiveDataStream(); | 456 | FtpDataStream dataStream = GetDataStream(); |
| 404 | Queue lineQueue = new Queue(); | 457 | Queue lineQueue = new Queue(); |
| 405 | 458 | ||
| 406 | Command("LIST"); | 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 | internal FtpDataStream GetPassiveDataStream() | 564 | internal FtpDataStream GetPassiveDataStream() |
| 438 | { | 565 | { |
| 439 | return GetPassiveDataStream(TransferDirection.Download); | 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 | private int GetPassivePort() | 609 | private int GetPassivePort() |
| 468 | { | 610 | { |
| 469 | Command("PASV"); | 611 | Command("PASV"); |
| @@ -550,7 +550,7 @@ namespace GSF.Net.Ftp · 549 unmodified lines | |||
| 550 | { | 550 | { |
| 551 | InitHashtable(); | 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 | try | 555 | try |
| 556 | { | 556 | { |
| @@ -238,7 +238,7 @@ namespace GSF.Net.Ftp · 237 unmodified lines | |||
| 238 | if (offset != 0) | 238 | if (offset != 0) |
| 239 | Session.ControlChannel.REST(offset); | 239 | Session.ControlChannel.REST(offset); |
| 240 | 240 | ||
| 241 | FtpDataStream stream = Session.ControlChannel.GetPassiveDataStream(dir); | 241 | FtpDataStream stream = Session.ControlChannel.GetDataStream(dir); |
| 242 | 242 | ||
| 243 | try | 243 | try |
| 244 | { | 244 | { |
| @@ -207,13 +207,14 @@ namespace GSF.Net.Ftp · 206 unmodified lines | |||
| 207 | 207 | ||
| 208 | m_session.Host.OnBeginFileTransfer(m_localFile, m_remoteFile, m_transferDirection); | 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 | if (m_transferDirection == TransferDirection.Download) | 213 | if (m_transferDirection == TransferDirection.Download) |
| 211 | localStream = new FileStream(m_localFile, FileMode.OpenOrCreate); | 214 | localStream = new FileStream(m_localFile, FileMode.Create); |
| 212 | else | 215 | else |
| 213 | localStream = new FileStream(m_localFile, FileMode.Open, FileAccess.Read); | 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 | m_streamCopyRoutine(remoteStream, localStream); | 218 | m_streamCopyRoutine(remoteStream, localStream); |
| 218 | 219 | ||
| 219 | // Dispose remote stream before testing file transfer result to ensure | 220 | // Dispose remote stream before testing file transfer result to ensure |
| @@ -42,6 +42,7 @@ · 41 unmodified lines | |||
| 42 | #endregion | 42 | #endregion |
| 43 | 43 | ||
| 44 | using System; | 44 | using System; |
| 45 | using System.Net; | ||
| 45 | using System.Threading; | 46 | using System.Threading; |
| 46 | 47 | ||
| 47 | namespace GSF.Net.Ftp | 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 | public FtpDirectory RootDirectory | 171 | public FtpDirectory RootDirectory |
| 123 | { | 172 | { |
| 124 | get | 173 | get |
| @@ -42,6 +42,7 @@ · 41 unmodified lines | |||
| 42 | #endregion | 42 | #endregion |
| 43 | 43 | ||
| 44 | using System; | 44 | using System; |
| 45 | using System.Net; | ||
| 45 | 46 | ||
| 46 | namespace GSF.Net.Ftp | 47 | namespace GSF.Net.Ftp |
| 47 | { | 48 | { |
| @@ -54,6 +55,10 @@ namespace GSF.Net.Ftp · 6 unmodified lines | |||
| 54 | private string m_server; | 55 | private string m_server; |
| 55 | private int m_port; | 56 | private int m_port; |
| 56 | private int m_timeout; | 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 | private readonly bool m_caseInsensitive; | 62 | private readonly bool m_caseInsensitive; |
| 58 | private bool m_disposed; | 63 | private bool m_disposed; |
| 59 | 64 | ||
| @@ -63,6 +68,7 @@ namespace GSF.Net.Ftp · 3 unmodified lines | |||
| 63 | 68 | ||
| 64 | internal FtpSessionDisconnected(FtpClient h, bool caseInsensitive) | 69 | internal FtpSessionDisconnected(FtpClient h, bool caseInsensitive) |
| 65 | { | 70 | { |
| 71 | m_passive = true; | ||
| 66 | m_timeout = 30000; | 72 | m_timeout = 30000; |
| 67 | m_port = 21; | 73 | m_port = 21; |
| 68 | m_host = h; | 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 | public FtpDirectory CurrentDirectory | 174 | public FtpDirectory CurrentDirectory |
| 121 | { | 175 | { |
| 122 | get | 176 | get |
| @@ -193,6 +247,12 @@ namespace GSF.Net.Ftp · 70 unmodified lines | |||
| 193 | ctrl.Server = m_server; | 247 | ctrl.Server = m_server; |
| 194 | ctrl.Port = m_port; | 248 | ctrl.Port = m_port; |
| 195 | ctrl.Timeout = m_timeout; | 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 | ctrl.Connect(); | 256 | ctrl.Connect(); |
| 197 | 257 | ||
| 198 | try | 258 | try |
| @@ -42,6 +42,7 @@ · 41 unmodified lines | |||
| 42 | #endregion | 42 | #endregion |
| 43 | 43 | ||
| 44 | using System; | 44 | using System; |
| 45 | using System.Net; | ||
| 45 | 46 | ||
| 46 | namespace GSF.Net.Ftp | 47 | namespace GSF.Net.Ftp |
| 47 | { | 48 | { |
| @@ -66,6 +67,28 @@ namespace GSF.Net.Ftp · 18 unmodified lines | |||
| 66 | /// </summary> | 67 | /// </summary> |
| 67 | int Timeout { get; set; } | 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 | /// <summary> | 92 | /// <summary> |
| 70 | /// Gets or sets current FTP session directory. | 93 | /// Gets or sets current FTP session directory. |
| 71 | /// </summary> | 94 | /// </summary> |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -57,7 +57,7 @@ using System.Runtime.InteropServices; · 56 unmodified lines | |||
| 57 | // | 57 | // |
| 58 | // You can specify all the values or you can default the Build and Revision Numbers | 58 | // You can specify all the values or you can default the Build and Revision Numbers |
| 59 | // by using the '*' as shown below: | 59 | // by using the '*' as shown below: |
| 60 | // [assembly: AssemblyVersion("2.1.465.0")] | 60 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 61 | [assembly: AssemblyVersion("2.1.465.0")] | 61 | [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyFileVersion("2.1.465.0")] | 62 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 63 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -48,8 +48,8 @@ using System.Runtime.InteropServices; · 47 unmodified lines | |||
| 48 | [assembly: Guid("6d59b0ed-1991-4f12-a739-2cf8543dd9b2")] | 48 | [assembly: Guid("6d59b0ed-1991-4f12-a739-2cf8543dd9b2")] |
| 49 | 49 | ||
| 50 | // Assembly identity attributes. | 50 | // Assembly identity attributes. |
| 51 | [assembly: AssemblyVersion("2.1.465.0")] | 51 | [assembly: AssemblyVersion("2.2.8.0")] |
| 52 | [assembly: AssemblyFileVersion("2.1.465.0")] | 52 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 53 | 53 | ||
| 54 | [assembly: SuppressMessage("Microsoft.Usage", "CA2243:AttributeStringLiteralsShouldParseCorrectly")] | 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 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -35,7 +35,7 @@ namespace GSF.SELEventParser · 34 unmodified lines | |||
| 35 | // Fields | 35 | // Fields |
| 36 | private Channel<DateTime> m_timeChannel; | 36 | private Channel<DateTime> m_timeChannel; |
| 37 | private List<Channel<double>> m_analogChannels; | 37 | private List<Channel<double>> m_analogChannels; |
| 38 | private List<Channel<bool>> m_digitalChannels; | 38 | private List<Channel<bool>> m_digitalChannels; |
| 39 | 39 | ||
| 40 | #endregion | 40 | #endregion |
| 41 | 41 | ||
| @@ -46,7 +46,6 @@ namespace GSF.SELEventParser · 4 unmodified lines | |||
| 46 | m_timeChannel = new Channel<DateTime>() { Name = "Time" }; | 46 | m_timeChannel = new Channel<DateTime>() { Name = "Time" }; |
| 47 | m_analogChannels = new List<Channel<double>>(); | 47 | m_analogChannels = new List<Channel<double>>(); |
| 48 | m_digitalChannels = new List<Channel<bool>>(); | 48 | m_digitalChannels = new List<Channel<bool>>(); |
| 49 | |||
| 50 | } | 49 | } |
| 51 | 50 | ||
| 52 | #endregion | 51 | #endregion |
| @@ -89,7 +88,6 @@ namespace GSF.SELEventParser · 36 unmodified lines | |||
| 89 | } | 88 | } |
| 90 | } | 89 | } |
| 91 | 90 | ||
| 92 | |||
| 93 | #endregion | 91 | #endregion |
| 94 | 92 | ||
| 95 | #region [ Methods ] | 93 | #region [ Methods ] |
| @@ -111,6 +109,11 @@ namespace GSF.SELEventParser · 15 unmodified lines | |||
| 111 | // Static Methods | 109 | // Static Methods |
| 112 | 110 | ||
| 113 | public static AnalogSection Parse(DateTime eventTime, string[] lines, ref int index) | 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 | const string CycleHeader = @"^\[\d+\]$"; | 118 | const string CycleHeader = @"^\[\d+\]$"; |
| 116 | 119 | ||
| @@ -239,6 +242,7 @@ namespace GSF.SELEventParser · 122 unmodified lines | |||
| 239 | currentLine = currentLine.Remove(analogEndIndex); | 242 | currentLine = currentLine.Remove(analogEndIndex); |
| 240 | 243 | ||
| 241 | analogs = currentLine | 244 | analogs = currentLine |
| 245 | .Replace("-", " -") | ||
| 242 | .Split((char[])null, StringSplitOptions.RemoveEmptyEntries) | 246 | .Split((char[])null, StringSplitOptions.RemoveEmptyEntries) |
| 243 | .TakeWhile(field => double.TryParse(field, out analog)) | 247 | .TakeWhile(field => double.TryParse(field, out analog)) |
| 244 | .Select(field => analog) | 248 | .Select(field => analog) |
| @@ -276,7 +280,7 @@ namespace GSF.SELEventParser · 31 unmodified lines | |||
| 276 | 280 | ||
| 277 | // Determine the time per sample, in ticks | 281 | // Determine the time per sample, in ticks |
| 278 | firstCycleCount = analogSection.AnalogChannels.First().Cycles.First().Samples.Count; | 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 | for (int i = 0; i < sampleCount; i++) | 285 | for (int i = 0; i < sampleCount; i++) |
| 282 | { | 286 | { |
| @@ -287,6 +287,11 @@ namespace GSF.SELEventParser · 286 unmodified lines | |||
| 287 | // Static Methods | 287 | // Static Methods |
| 288 | 288 | ||
| 289 | public static CommaSeparatedEventReport Parse(string[] lines, ref int index) | 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 | CommaSeparatedEventReport commaSeparatedEventReport = new CommaSeparatedEventReport(); | 296 | CommaSeparatedEventReport commaSeparatedEventReport = new CommaSeparatedEventReport(); |
| 292 | commaSeparatedEventReport.Firmware = new Firmware(); | 297 | commaSeparatedEventReport.Firmware = new Firmware(); |
| @@ -370,7 +375,7 @@ namespace GSF.SELEventParser · 77 unmodified lines | |||
| 370 | } | 375 | } |
| 371 | 376 | ||
| 372 | commaSeparatedEventReport.InitialReadingIndex = ++index; | 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 | while (!lines[index].ToUpper().Contains("SETTINGS")) | 380 | while (!lines[index].ToUpper().Contains("SETTINGS")) |
| 376 | { | 381 | { |
| @@ -115,6 +115,11 @@ namespace GSF.SELEventParser · 114 unmodified lines | |||
| 115 | // Static Methods | 115 | // Static Methods |
| 116 | 116 | ||
| 117 | public static EventFile Parse(string filename) | 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 | string[] lineSeparators = { "\r\n", "\n\r", "\r", "\n" }; | 124 | string[] lineSeparators = { "\r\n", "\n\r", "\r", "\n" }; |
| 120 | 125 | ||
| @@ -146,7 +151,7 @@ namespace GSF.SELEventParser · 25 unmodified lines | |||
| 146 | 151 | ||
| 147 | if (command.ToUpper().Contains("EVE")) | 152 | if (command.ToUpper().Contains("EVE")) |
| 148 | { | 153 | { |
| 149 | parsedEventReport = EventReport.Parse(lines, ref lineIndex); | 154 | parsedEventReport = EventReport.Parse(systemFrequency, lines, ref lineIndex); |
| 150 | parsedEventReport.Command = command; | 155 | parsedEventReport.Command = command; |
| 151 | parsedFile.Add(parsedEventReport); | 156 | parsedFile.Add(parsedEventReport); |
| 152 | } | 157 | } |
| @@ -210,6 +210,11 @@ namespace GSF.SELEventParser · 209 unmodified lines | |||
| 210 | // Static Methods | 210 | // Static Methods |
| 211 | 211 | ||
| 212 | public static EventReport Parse(string[] lines, ref int index) | 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 | EventReport eventReport = new EventReport(); | 219 | EventReport eventReport = new EventReport(); |
| 215 | int firmwareIndex; | 220 | int firmwareIndex; |
| @@ -233,7 +238,7 @@ namespace GSF.SELEventParser · 17 unmodified lines | |||
| 233 | EventFile.SkipBlanks(lines, ref index); | 238 | EventFile.SkipBlanks(lines, ref index); |
| 234 | 239 | ||
| 235 | // Parse the analog section of the report | 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 | if (lines.Length < index) | 243 | if (lines.Length < index) |
| 239 | { | 244 | { |
| @@ -44,6 +44,6 @@ using System.Runtime.InteropServices; · 43 unmodified lines | |||
| 44 | [assembly: Guid("ee39b8ec-2b03-46f8-9ea8-25bba8e33032")] | 44 | [assembly: Guid("ee39b8ec-2b03-46f8-9ea8-25bba8e33032")] |
| 45 | 45 | ||
| 46 | // Assembly identity attributes. | 46 | // Assembly identity attributes. |
| 47 | [assembly: AssemblyVersion("2.1.465.0")] | 47 | [assembly: AssemblyVersion("2.2.8.0")] |
| 48 | [assembly: AssemblyFileVersion("2.1.465.0")] | 48 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 49 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 49 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -62,7 +62,7 @@ using System.Runtime.InteropServices; · 61 unmodified lines | |||
| 62 | // | 62 | // |
| 63 | // You can specify all the values or you can default the Build and Revision Numbers | 63 | // You can specify all the values or you can default the Build and Revision Numbers |
| 64 | // by using the '*' as shown below: | 64 | // by using the '*' as shown below: |
| 65 | // [assembly: AssemblyVersion("2.1.465.0")] | 65 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 66 | [assembly: AssemblyVersion("2.1.465.0")] | 66 | [assembly: AssemblyVersion("2.2.8.0")] |
| 67 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 67 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 68 | 68 | ||
| @@ -90,6 +90,16 @@ namespace GSF.TimeSeries.Transport · 89 unmodified lines | |||
| 90 | /// </summary> | 90 | /// </summary> |
| 91 | public const bool DefaultUseMillisecondResolution = true; | 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 | // Events | 103 | // Events |
| 94 | 104 | ||
| 95 | /// <summary> | 105 | /// <summary> |
| @@ -160,6 +170,8 @@ namespace GSF.TimeSeries.Transport · 64 unmodified lines | |||
| 160 | m_recoveryStartDelay = DefaultRecoveryStartDelay; | 170 | m_recoveryStartDelay = DefaultRecoveryStartDelay; |
| 161 | m_minimumRecoverySpan = DefaultMinimumRecoverySpan; | 171 | m_minimumRecoverySpan = DefaultMinimumRecoverySpan; |
| 162 | m_maximumRecoverySpan = DefaultMaximumRecoverySpan; | 172 | m_maximumRecoverySpan = DefaultMaximumRecoverySpan; |
| 173 | StartRecoveryBuffer = DefaultStartRecoveryBuffer; | ||
| 174 | EndRecoveryBuffer = DefaultEndRecoveryBuffer; | ||
| 163 | 175 | ||
| 164 | string loggingPath = FilePath.GetDirectoryName(FilePath.GetAbsolutePath(DataSubscriber.DefaultLoggingPath)); | 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 | /// <summary> | 484 | /// <summary> |
| 455 | /// Gets or sets any additional constraint parameters that will be supplied to adapters in temporal | 485 | /// Gets or sets any additional constraint parameters that will be supplied to adapters in temporal |
| 456 | /// subscription used when recovering data for an <see cref="Outage"/>. | 486 | /// subscription used when recovering data for an <see cref="Outage"/>. |
| @@ -546,6 +576,10 @@ namespace GSF.TimeSeries.Transport · 89 unmodified lines | |||
| 546 | status.AppendLine(); | 576 | status.AppendLine(); |
| 547 | status.AppendFormat("Use millisecond resolution: {0}", UseMillisecondResolution); | 577 | status.AppendFormat("Use millisecond resolution: {0}", UseMillisecondResolution); |
| 548 | status.AppendLine(); | 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 | status.AppendFormat(" Logging path: {0}", FilePath.TrimFileName(m_loggingPath.ToNonNullNorWhiteSpace(FilePath.GetAbsolutePath("")), 51)); | 583 | status.AppendFormat(" Logging path: {0}", FilePath.TrimFileName(m_loggingPath.ToNonNullNorWhiteSpace(FilePath.GetAbsolutePath("")), 51)); |
| 550 | status.AppendLine(); | 584 | status.AppendLine(); |
| 551 | 585 | ||
| @@ -682,6 +716,12 @@ namespace GSF.TimeSeries.Transport · 130 unmodified lines | |||
| 682 | if (settings.TryGetValue("useMillisecondResolution", out setting)) | 716 | if (settings.TryGetValue("useMillisecondResolution", out setting)) |
| 683 | UseMillisecondResolution = setting.ParseBoolean(); | 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 | // Get logging path, if any has been defined | 725 | // Get logging path, if any has been defined |
| 686 | if (settings.TryGetValue("loggingPath", out setting)) | 726 | if (settings.TryGetValue("loggingPath", out setting)) |
| 687 | { | 727 | { |
| @@ -716,7 +756,7 @@ namespace GSF.TimeSeries.Transport · 28 unmodified lines | |||
| 716 | m_dataGapLog.Initialize(); | 756 | m_dataGapLog.Initialize(); |
| 717 | 757 | ||
| 718 | // Setup data gap processor to process items one at a time, a 5-second minimum period is established between each gap processing | 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 | /// <summary> | 762 | /// <summary> |
| @@ -745,7 +785,7 @@ namespace GSF.TimeSeries.Transport · 22 unmodified lines | |||
| 745 | if (dataGapSpan >= m_minimumRecoverySpan && dataGapSpan <= m_maximumRecoverySpan) | 785 | if (dataGapSpan >= m_minimumRecoverySpan && dataGapSpan <= m_maximumRecoverySpan) |
| 746 | { | 786 | { |
| 747 | // Since local clock may float we add some buffer around recovery window | 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 | return true; | 789 | return true; |
| 750 | } | 790 | } |
| 751 | 791 | ||
| @@ -794,14 +834,18 @@ namespace GSF.TimeSeries.Transport · 42 unmodified lines | |||
| 794 | /// <returns><c>true</c> if log was flushed successfully; otherwise, <c>false</c> if flush timed out.</returns> | 834 | /// <returns><c>true</c> if log was flushed successfully; otherwise, <c>false</c> if flush timed out.</returns> |
| 795 | public bool FlushLog(int timeout = Timeout.Infinite) | 835 | public bool FlushLog(int timeout = Timeout.Infinite) |
| 796 | { | 836 | { |
| 797 | if (m_disposed) | 837 | try |
| 798 | throw new InvalidOperationException("Data gap recoverer has been disposed. Cannot flush log."); | 838 | { |
| 799 | 839 | // Wait for process completion if in progress | |
| 800 | // Wait for process completion if in progress | 840 | if (!m_disposed && m_dataGapRecoveryCompleted.Wait(timeout)) |
| 801 | if (m_dataGapRecoveryCompleted.Wait(timeout)) | 841 | return m_dataGapLog?.Flush().Wait(timeout) ?? false; |
| 802 | 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 | // Can only start data gap processing when end time of recovery range is beyond recovery start delay | 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 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -76,7 +76,7 @@ using System.Windows; · 75 unmodified lines | |||
| 76 | // | 76 | // |
| 77 | // You can specify all the values or you can default the Build and Revision Numbers | 77 | // You can specify all the values or you can default the Build and Revision Numbers |
| 78 | // by using the '*' as shown below: | 78 | // by using the '*' as shown below: |
| 79 | // [assembly: AssemblyVersion("2.1.465.0")] | 79 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 80 | [assembly: AssemblyVersion("2.1.465.0")] | 80 | [assembly: AssemblyVersion("2.2.8.0")] |
| 81 | [assembly: AssemblyFileVersion("2.1.465.0")] | 81 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 82 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 82 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -4,8 +4,8 @@ using System.Resources; · 3 unmodified lines | |||
| 4 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
| 5 | 5 | ||
| 6 | // Assembly identity attributes. | 6 | // Assembly identity attributes. |
| 7 | [assembly: AssemblyVersion("2.1.465.0")] | 7 | [assembly: AssemblyVersion("2.2.8.0")] |
| 8 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 8 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 9 | 9 | ||
| 10 | // Informational attributes. | 10 | // Informational attributes. |
| 11 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 11 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -27,8 +27,8 @@ using System.Web.UI; · 26 unmodified lines | |||
| 27 | using GSF.Web.Hosting; | 27 | using GSF.Web.Hosting; |
| 28 | 28 | ||
| 29 | // Assembly identity attributes. | 29 | // Assembly identity attributes. |
| 30 | [assembly: AssemblyVersion("2.1.465.0")] | 30 | [assembly: AssemblyVersion("2.2.8.0")] |
| 31 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 31 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 32 | 32 | ||
| 33 | // Informational attributes. | 33 | // Informational attributes. |
| 34 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 34 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -30,6 +30,6 @@ using System.Runtime.InteropServices; · 29 unmodified lines | |||
| 30 | // | 30 | // |
| 31 | // You can specify all the values or you can default the Build and Revision Numbers | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | // by using the '*' as shown below: | 32 | // by using the '*' as shown below: |
| 33 | // [assembly: AssemblyVersion("2.1.465.0")] | 33 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyVersion("2.1.465.0")] | 34 | [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyFileVersion("2.1.465.0")] | 35 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | |||
| 59 | // | 59 | // |
| 60 | // You can specify all the values or you can default the Build and Revision Numbers | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | // by using the '*' as shown below: | 61 | // by using the '*' as shown below: |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | |||
| 59 | // | 59 | // |
| 60 | // You can specify all the values or you can default the Build and Revision Numbers | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | // by using the '*' as shown below: | 61 | // by using the '*' as shown below: |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -26,8 +26,8 @@ using System.Reflection; · 25 unmodified lines | |||
| 26 | using System.Runtime.InteropServices; | 26 | using System.Runtime.InteropServices; |
| 27 | 27 | ||
| 28 | // Assembly identity attributes. | 28 | // Assembly identity attributes. |
| 29 | [assembly: AssemblyVersion("2.1.465.0")] | 29 | [assembly: AssemblyVersion("2.2.8.0")] |
| 30 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 30 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 31 | 31 | ||
| 32 | // Informational attributes. | 32 | // Informational attributes. |
| 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 33 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | |||
| 59 | // | 59 | // |
| 60 | // You can specify all the values or you can default the Build and Revision Numbers | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | // by using the '*' as shown below: | 61 | // by using the '*' as shown below: |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | |||
| 59 | // | 59 | // |
| 60 | // You can specify all the values or you can default the Build and Revision Numbers | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | // by using the '*' as shown below: | 61 | // by using the '*' as shown below: |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | |||
| 59 | // | 59 | // |
| 60 | // You can specify all the values or you can default the Build and Revision Numbers | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | // by using the '*' as shown below: | 61 | // by using the '*' as shown below: |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | |||
| 59 | // | 59 | // |
| 60 | // You can specify all the values or you can default the Build and Revision Numbers | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | // by using the '*' as shown below: | 61 | // by using the '*' as shown below: |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | |||
| 59 | // | 59 | // |
| 60 | // You can specify all the values or you can default the Build and Revision Numbers | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | // by using the '*' as shown below: | 61 | // by using the '*' as shown below: |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -59,6 +59,6 @@ using System.Runtime.InteropServices; · 58 unmodified lines | |||
| 59 | // | 59 | // |
| 60 | // You can specify all the values or you can default the Build and Revision Numbers | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | // by using the '*' as shown below: | 61 | // by using the '*' as shown below: |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -50,6 +50,6 @@ using System.Windows; · 49 unmodified lines | |||
| 50 | // | 50 | // |
| 51 | // You can specify all the values or you can default the Build and Revision Numbers | 51 | // You can specify all the values or you can default the Build and Revision Numbers |
| 52 | // by using the '*' as shown below: | 52 | // by using the '*' as shown below: |
| 53 | // [assembly: AssemblyVersion("2.1.465.0")] | 53 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 54 | [assembly: AssemblyVersion("2.1.465.0")] | 54 | [assembly: AssemblyVersion("2.2.8.0")] |
| 55 | [assembly: AssemblyFileVersion("2.1.465.0")] | 55 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | |||
| 30 | // | 30 | // |
| 31 | // You can specify all the values or you can default the Build and Revision Numbers | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | // by using the '*' as shown below: | 32 | // by using the '*' as shown below: |
| 33 | // [assembly: AssemblyVersion("2.1.465.0")] | 33 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyVersion("2.1.465.0")] | 34 | [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyFileVersion("2.1.465.0")] | 35 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 36 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 36 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | |||
| 30 | // | 30 | // |
| 31 | // You can specify all the values or you can default the Build and Revision Numbers | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | // by using the '*' as shown below: | 32 | // by using the '*' as shown below: |
| 33 | // [assembly: AssemblyVersion("2.1.465.0")] | 33 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyVersion("2.1.465.0")] | 34 | [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyFileVersion("2.1.465.0")] | 35 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 36 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 36 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -26,8 +26,8 @@ using System.Reflection; · 25 unmodified lines | |||
| 26 | using System.Runtime.InteropServices; | 26 | using System.Runtime.InteropServices; |
| 27 | 27 | ||
| 28 | // Assembly identity attributes. | 28 | // Assembly identity attributes. |
| 29 | [assembly: AssemblyVersion("2.1.465.0")] | 29 | [assembly: AssemblyVersion("2.2.8.0")] |
| 30 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 30 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 31 | 31 | ||
| 32 | // Informational attributes. | 32 | // Informational attributes. |
| 33 | [assembly: AssemblyTitle("HistorianPlaybackUtility")] | 33 | [assembly: AssemblyTitle("HistorianPlaybackUtility")] |
| @@ -75,7 +75,7 @@ using System.Windows; · 74 unmodified lines | |||
| 75 | // | 75 | // |
| 76 | // You can specify all the values or you can default the Build and Revision Numbers | 76 | // You can specify all the values or you can default the Build and Revision Numbers |
| 77 | // by using the '*' as shown below: | 77 | // by using the '*' as shown below: |
| 78 | // [assembly: AssemblyVersion("2.1.465.0")] | 78 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 79 | [assembly: AssemblyVersion("2.1.465.0")] | 79 | [assembly: AssemblyVersion("2.2.8.0")] |
| 80 | [assembly: AssemblyFileVersion("2.1.465.0")] | 80 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 81 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 81 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -30,6 +30,6 @@ using System.Runtime.InteropServices; · 29 unmodified lines | |||
| 30 | // | 30 | // |
| 31 | // You can specify all the values or you can default the Build and Revision Numbers | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | // by using the '*' as shown below: | 32 | // by using the '*' as shown below: |
| 33 | // [assembly: AssemblyVersion("2.1.465.0")] | 33 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyVersion("2.1.465.0")] | 34 | [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyFileVersion("2.1.465.0")] | 35 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| @@ -28,7 +28,7 @@ using System.Runtime.InteropServices; · 27 unmodified lines | |||
| 28 | // | 28 | // |
| 29 | // You can specify all the values or you can default the Build and Revision Numbers | 29 | // You can specify all the values or you can default the Build and Revision Numbers |
| 30 | // by using the '*' as shown below: | 30 | // by using the '*' as shown below: |
| 31 | // [assembly: AssemblyVersion("2.1.465.0")] | 31 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 32 | [assembly: AssemblyVersion("2.1.465.0")] | 32 | [assembly: AssemblyVersion("2.2.8.0")] |
| 33 | [assembly: AssemblyFileVersion("2.1.465.0")] | 33 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 34 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -50,7 +50,7 @@ using System.Runtime.InteropServices; · 49 unmodified lines | |||
| 50 | // | 50 | // |
| 51 | // You can specify all the values or you can default the Build and Revision Numbers | 51 | // You can specify all the values or you can default the Build and Revision Numbers |
| 52 | // by using the '*' as shown below: | 52 | // by using the '*' as shown below: |
| 53 | // [assembly: AssemblyVersion("2.1.465.0")] | 53 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 54 | [assembly: AssemblyVersion("2.1.465.0")] | 54 | [assembly: AssemblyVersion("2.2.8.0")] |
| 55 | [assembly: AssemblyFileVersion("2.1.465.0")] | 55 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 56 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 56 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -58,7 +58,7 @@ using System.Runtime.InteropServices; · 57 unmodified lines | |||
| 58 | // | 58 | // |
| 59 | // You can specify all the values or you can default the Build and Revision Numbers | 59 | // You can specify all the values or you can default the Build and Revision Numbers |
| 60 | // by using the '*' as shown below: | 60 | // by using the '*' as shown below: |
| 61 | // [assembly: AssemblyVersion("2.1.465.0")] | 61 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 62 | [assembly: AssemblyVersion("2.1.465.0")] | 62 | [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyFileVersion("2.1.465.0")] | 63 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 64 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -31,8 +31,8 @@ using System.Runtime.InteropServices; · 30 unmodified lines | |||
| 31 | // | 31 | // |
| 32 | // You can specify all the values or you can default the Build and Revision Numbers | 32 | // You can specify all the values or you can default the Build and Revision Numbers |
| 33 | // by using the '*' as shown below: | 33 | // by using the '*' as shown below: |
| 34 | // [assembly: AssemblyVersion("2.1.465.0")] | 34 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyVersion("2.1.465.0")] | 35 | [assembly: AssemblyVersion("2.2.8.0")] |
| 36 | [assembly: AssemblyFileVersion("2.1.465.0")] | 36 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 37 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 37 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 38 | [assembly: NeutralResourcesLanguage("en-US")] | 38 | [assembly: NeutralResourcesLanguage("en-US")] |
| @@ -59,7 +59,7 @@ using System.Runtime.InteropServices; · 58 unmodified lines | |||
| 59 | // | 59 | // |
| 60 | // You can specify all the values or you can default the Build and Revision Numbers | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | // by using the '*' as shown below: | 61 | // by using the '*' as shown below: |
| 62 | // [assembly: AssemblyVersion("2.1.465.0")] | 62 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyVersion("2.1.465.0")] | 63 | [assembly: AssemblyVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyFileVersion("2.1.465.0")] | 64 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 65 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 65 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -59,7 +59,7 @@ using System.Runtime.InteropServices; · 58 unmodified lines | |||
| 59 | // | 59 | // |
| 60 | // You can specify all the values or you can default the Build and Revision Numbers | 60 | // You can specify all the values or you can default the Build and Revision Numbers |
| 61 | // by using the '*' as shown below: | 61 | // by using the '*' as shown below: |
| 62 | // [assembly: AssemblyVersion("2.1.465.0")] | 62 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 63 | [assembly: AssemblyVersion("2.1.465.0")] | 63 | [assembly: AssemblyVersion("2.2.8.0")] |
| 64 | [assembly: AssemblyFileVersion("2.1.465.0")] | 64 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 65 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 65 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -25,8 +25,8 @@ using System.Reflection; · 24 unmodified lines | |||
| 25 | using System.Runtime.InteropServices; | 25 | using System.Runtime.InteropServices; |
| 26 | 26 | ||
| 27 | // Assembly identity attributes. | 27 | // Assembly identity attributes. |
| 28 | [assembly: AssemblyVersion("2.1.465.0")] | 28 | [assembly: AssemblyVersion("2.2.8.0")] |
| 29 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 29 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |
| 30 | 30 | ||
| 31 | // Informational attributes. | 31 | // Informational attributes. |
| 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] | 32 | [assembly: AssemblyCompany("Grid Protection Alliance")] |
| @@ -30,7 +30,7 @@ using System.Runtime.InteropServices; · 29 unmodified lines | |||
| 30 | // | 30 | // |
| 31 | // You can specify all the values or you can default the Build and Revision Numbers | 31 | // You can specify all the values or you can default the Build and Revision Numbers |
| 32 | // by using the '*' as shown below: | 32 | // by using the '*' as shown below: |
| 33 | // [assembly: AssemblyVersion("2.1.465.0")] | 33 | // [assembly: AssemblyVersion("2.2.8.0")] |
| 34 | [assembly: AssemblyVersion("2.1.465.0")] | 34 | [assembly: AssemblyVersion("2.2.8.0")] |
| 35 | [assembly: AssemblyFileVersion("2.1.465.0")] | 35 | [assembly: AssemblyFileVersion("2.2.8.0")] |
| 36 | [assembly: AssemblyInformationalVersion("2.1.465-beta")] | 36 | [assembly: AssemblyInformationalVersion("2.2.8-beta")] |