Skip to content

Commit 33badcd

Browse files
author
Doug Schmidt
authored
Merge pull request #71 from DougSchmidt-AI/feature/Issue-70-LocationDeleterShouldSkipLockedData
Feature/issue 70 location deleter should skip locked data
2 parents ecd664c + faaeaf0 commit 33badcd

File tree

4 files changed

+74
-17
lines changed

4 files changed

+74
-17
lines changed

TimeSeries/PublicApis/SdkExamples/LocationDeleter/Deleter.cs

Lines changed: 67 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ private static string GetExecutingFileVersion()
5959
return $"{MethodBase.GetCurrentMethod().DeclaringType.Namespace} v{fileVersionInfo.FileVersion}";
6060
}
6161

62+
private int LockedVisitCount { get; set; }
63+
6264
private void DeleteSpecifiedFieldVisits()
6365
{
6466
if (!IsFieldVisitDeletionEnabled())
@@ -91,17 +93,26 @@ private void DeleteSpecifiedFieldVisits()
9193

9294
Log.Info($"Inspecting {locationQuantity} for field visits {string.Join(" and ", timeRange)} ...");
9395

96+
LockedVisitCount = 0;
97+
9498
var deletedVisitCount = 0;
9599

96100
foreach (var locationInfo in ResolvedLocations)
97101
{
98102
deletedVisitCount += DeleteVisitsAtLocation(locationInfo);
99103
}
100104

105+
var lockedVisitSummary = string.Empty;
106+
107+
if (LockedVisitCount > 0)
108+
{
109+
lockedVisitSummary = $", skipping {"locked field visit".ToQuantity(LockedVisitCount)}";
110+
}
111+
101112
if (Context.DryRun)
102-
Log.Info($"Dry run completed. {"field visit".ToQuantity(InspectedFieldVisits)} would have been deleted from {locationQuantity}.");
113+
Log.Info($"Dry run completed. {"field visit".ToQuantity(InspectedFieldVisits)} would have been deleted from {locationQuantity}{lockedVisitSummary}.");
103114
else
104-
Log.Info($"Deleted {"field visit".ToQuantity(deletedVisitCount)} from {locationQuantity}.");
115+
Log.Info($"Deleted {"field visit".ToQuantity(deletedVisitCount)} from {locationQuantity}{lockedVisitSummary}.");
105116
}
106117

107118
private bool IsFieldVisitDeletionEnabled()
@@ -114,11 +125,28 @@ private int DeleteVisitsAtLocation(LocationInfo locationInfo)
114125
var siteVisitLocation = GetSiteVisitLocation(locationInfo);
115126

116127
var visits = _siteVisit.Get(new GetLocationVisits
128+
{
129+
Id = siteVisitLocation.Id,
130+
StartTime = Context.VisitsAfter?.UtcDateTime,
131+
EndTime = Context.VisitsBefore?.UtcDateTime
132+
})
133+
.OrderBy(v => v.StartDate)
134+
.ToList();
135+
136+
var lockedVisits = visits
137+
.Where(v => v.IsLocked)
138+
.ToList();
139+
140+
if (lockedVisits.Any())
117141
{
118-
Id = siteVisitLocation.Id,
119-
StartTime = Context.VisitsAfter?.UtcDateTime,
120-
EndTime = Context.VisitsBefore?.UtcDateTime
121-
});
142+
Log.Warn($"Skipping deletion of {"locked field visit".ToQuantity(lockedVisits.Count)} in location '{locationInfo.Identifier}'.");
143+
144+
LockedVisitCount += lockedVisits.Count;
145+
146+
visits = visits
147+
.Where(v => !v.IsLocked)
148+
.ToList();
149+
}
122150

123151
if (!visits.Any())
124152
{
@@ -153,6 +181,8 @@ private int DeleteVisitsAtLocation(LocationInfo locationInfo)
153181
return visits.Count;
154182
}
155183

184+
private int LockedTimeSeriesCount { get; set; }
185+
156186
private void DeleteSpecifiedTimeSeries()
157187
{
158188
if (!Context.TimeSeriesToDelete.Any())
@@ -161,17 +191,26 @@ private void DeleteSpecifiedTimeSeries()
161191
if (Is3X())
162192
throw new ExpectedException($"Time-series deletion is not supported for AQTS {Client.ServerVersion}");
163193

194+
LockedTimeSeriesCount = 0;
195+
164196
var deletedTimeSeriesCount = 0;
165197

166198
foreach (var timeSeriesIdentifier in Context.TimeSeriesToDelete)
167199
{
168200
deletedTimeSeriesCount += DeleteTimeSeries(timeSeriesIdentifier);
169201
}
170202

203+
var lockedTimeSeriesSummary = string.Empty;
204+
205+
if (LockedTimeSeriesCount > 0)
206+
{
207+
lockedTimeSeriesSummary = $", skipping {LockedTimeSeriesCount} locked time-series";
208+
}
209+
171210
if (Context.DryRun)
172-
Log.Info($"Dry run complete. {InspectedTimeSeries} time-series would have been deleted.");
211+
Log.Info($"Dry run complete. {InspectedTimeSeries} time-series would have been deleted{lockedTimeSeriesSummary}.");
173212
else
174-
Log.Info($"Deleted {deletedTimeSeriesCount} of {Context.TimeSeriesToDelete.Count} time-series.");
213+
Log.Info($"Deleted {deletedTimeSeriesCount} of {Context.TimeSeriesToDelete.Count} time-series{lockedTimeSeriesSummary}.");
175214
}
176215

177216
private int DeleteTimeSeries(string timeSeriesIdentifierOrGuid)
@@ -201,10 +240,27 @@ private int DeleteTimeSeries(string timeSeriesIdentifierOrGuid)
201240
}
202241

203242
Log.Info($"Deleting '{timeSeriesDescription.Identifier}' ...");
204-
DeleteTimeSeries(timeSeriesDescription);
205-
Log.Info($"Deleted '{timeSeriesDescription.Identifier}' successfully.");
206243

207-
return 1;
244+
try
245+
{
246+
DeleteTimeSeries(timeSeriesDescription);
247+
Log.Info($"Deleted '{timeSeriesDescription.Identifier}' successfully.");
248+
249+
return 1;
250+
}
251+
catch (WebServiceException exception)
252+
{
253+
if (exception.ErrorCode == "DeleteLockedTimeSeriesException")
254+
{
255+
Log.Warn($"Time-series '{timeSeriesDescription.Identifier}' has locked data and cannot be deleted.");
256+
257+
++LockedTimeSeriesCount;
258+
259+
return 0;
260+
}
261+
262+
throw;
263+
}
208264
}
209265

210266
private void DeleteTimeSeries(TimeSeriesDescription timeSeriesDescription)

TimeSeries/PublicApis/SdkExamples/LocationDeleter/LocationDeleter.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@
4040
<Reference Include="AQService.Common">
4141
<HintPath>InternalLibraries\AQService.Common.dll</HintPath>
4242
</Reference>
43-
<Reference Include="Aquarius.Client, Version=18.1.1.0, Culture=neutral, processorArchitecture=MSIL">
44-
<HintPath>..\packages\Aquarius.SDK.18.1.1\lib\net45\Aquarius.Client.dll</HintPath>
43+
<Reference Include="Aquarius.Client, Version=18.6.4.0, Culture=neutral, processorArchitecture=MSIL">
44+
<HintPath>..\packages\Aquarius.SDK.18.6.4\lib\net45\Aquarius.Client.dll</HintPath>
4545
</Reference>
46-
<Reference Include="Aquarius.Client.Legacy, Version=18.1.1.0, Culture=neutral, processorArchitecture=MSIL">
47-
<HintPath>..\packages\Aquarius.SDK.Legacy.18.1.1\lib\net45\Aquarius.Client.Legacy.dll</HintPath>
46+
<Reference Include="Aquarius.Client.Legacy, Version=18.6.4.0, Culture=neutral, processorArchitecture=MSIL">
47+
<HintPath>..\packages\Aquarius.SDK.Legacy.18.6.4\lib\net45\Aquarius.Client.Legacy.dll</HintPath>
4848
</Reference>
4949
<Reference Include="CommunicationShared">
5050
<HintPath>InternalLibraries\CommunicationShared.dll</HintPath>

TimeSeries/PublicApis/SdkExamples/LocationDeleter/PrivateApis.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public class Visit
5858
public long Id { get; set; }
5959
public DateTime StartDate { get; set; }
6060
public DateTime? EndDate { get; set; }
61+
public bool IsLocked { get; set; }
6162
}
6263

6364
[Route("/visits/{Id}", HttpMethods.Delete)]

TimeSeries/PublicApis/SdkExamples/LocationDeleter/packages.config

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="Aquarius.SDK" version="18.1.1" targetFramework="net47" />
4-
<package id="Aquarius.SDK.Legacy" version="18.1.1" targetFramework="net47" />
3+
<package id="Aquarius.SDK" version="18.6.4" targetFramework="net47" />
4+
<package id="Aquarius.SDK.Legacy" version="18.6.4" targetFramework="net47" />
55
<package id="Costura.Fody" version="1.6.2" targetFramework="net47" developmentDependency="true" />
66
<package id="Fody" version="2.0.0" targetFramework="net47" developmentDependency="true" />
77
<package id="Humanizer.Core" version="2.2.0" targetFramework="net47" />

0 commit comments

Comments
 (0)