OpenALPR Webhook Processor for IP Cameras

ok v2.1.1-alpha is out now with more logging, try to hydrate again and get the error.
 
Ok, here ya go.

Code:
{"log":"[11:29:44 WRN] Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed.\n","stream":"stdout","time":"2021-01-13T11:29:44.719560032Z"}
{"log":"[11:29:44 INF] User profile is available. Using '/root/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.\n","stream":"stdout","time":"2021-01-13T11:29:44.720455177Z"}
{"log":"[11:29:44 INF] Creating key {f4d94942-2114-4e49-b5fe-ddd4a87c76cb} with creation date 2021-01-13 11:29:44Z, activation date 2021-01-13 11:29:44Z, and expiration date 2021-04-13 11:29:44Z.\n","stream":"stdout","time":"2021-01-13T11:29:44.762372407Z"}
{"log":"[11:29:44 WRN] No XML encryptor configured. Key {f4d94942-2114-4e49-b5fe-ddd4a87c76cb} may be persisted to storage in unencrypted form.\n","stream":"stdout","time":"2021-01-13T11:29:44.778631977Z"}
{"log":"[11:29:44 INF] Writing data to file '/root/.aspnet/DataProtection-Keys/key-f4d94942-2114-4e49-b5fe-ddd4a87c76cb.xml'.\n","stream":"stdout","time":"2021-01-13T11:29:44.783077954Z"}
{"log":"[11:29:45 INF] Entity Framework Core 5.0.2 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-13T11:29:45.684864128Z"}
{"log":"[11:29:45 INF] Executed DbCommand (18ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-13T11:29:45.862986355Z"}
{"log":"SELECT COUNT(*) FROM \"sqlite_master\" WHERE \"name\" = '__EFMigrationsHistory' AND \"type\" = 'table';\n","stream":"stdout","time":"2021-01-13T11:29:45.863021275Z"}
{"log":"[11:29:45 INF] Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-13T11:29:45.901547887Z"}
{"log":"SELECT \"MigrationId\", \"ProductVersion\"\n","stream":"stdout","time":"2021-01-13T11:29:45.901583017Z"}
{"log":"FROM \"__EFMigrationsHistory\"\n","stream":"stdout","time":"2021-01-13T11:29:45.90159489Z"}
{"log":"ORDER BY \"MigrationId\";\n","stream":"stdout","time":"2021-01-13T11:29:45.901604877Z"}
{"log":"[11:29:46 INF] Entity Framework Core 5.0.2 initialized 'UsersContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-13T11:29:46.190447646Z"}
{"log":"[11:29:46 INF] Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-13T11:29:46.192717672Z"}
{"log":"SELECT COUNT(*) FROM \"sqlite_master\" WHERE \"name\" = '__EFMigrationsHistory' AND \"type\" = 'table';\n","stream":"stdout","time":"2021-01-13T11:29:46.19274505Z"}
{"log":"[11:29:46 INF] Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-13T11:29:46.195680377Z"}
{"log":"SELECT \"MigrationId\", \"ProductVersion\"\n","stream":"stdout","time":"2021-01-13T11:29:46.195705938Z"}
{"log":"FROM \"__EFMigrationsHistory\"\n","stream":"stdout","time":"2021-01-13T11:29:46.195716065Z"}
{"log":"ORDER BY \"MigrationId\";\n","stream":"stdout","time":"2021-01-13T11:29:46.195724306Z"}
{"log":"[11:29:46 INF] Now listening on: http://[::]:80\n","stream":"stdout","time":"2021-01-13T11:29:46.338696849Z"}
{"log":"[11:29:46 INF] Application started. Press Ctrl+C to shut down.\n","stream":"stdout","time":"2021-01-13T11:29:46.33904668Z"}
{"log":"[11:29:46 INF] Hosting environment: Production\n","stream":"stdout","time":"2021-01-13T11:29:46.339139219Z"}
{"log":"[11:29:46 INF] Content root path: /app\n","stream":"stdout","time":"2021-01-13T11:29:46.33923951Z"}
{"log":"[11:30:11 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/account/login - -\n","stream":"stdout","time":"2021-01-13T11:30:11.856495139Z"}
{"log":"[11:30:12 INF] Sending file. Request path: '/index.html'. Physical path: '/app/ClientApp/dist/index.html'\n","stream":"stdout","time":"2021-01-13T11:30:12.033776903Z"}
{"log":"[11:30:12 INF] HTTP GET /account/login responded 200 in 179.6480 ms\n","stream":"stdout","time":"2021-01-13T11:30:12.042769358Z"}
{"log":"[11:30:12 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/account/login - - - 200 6976 text/html 201.1079ms\n","stream":"stdout","time":"2021-01-13T11:30:12.050111412Z"}
{"log":"[11:30:12 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/styles.9da52eeded7d060fe531.css - -\n","stream":"stdout","time":"2021-01-13T11:30:12.155053699Z"}
{"log":"[11:30:12 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/runtime.3a13b20195430b549739.js - -\n","stream":"stdout","time":"2021-01-13T11:30:12.156799642Z"}
{"log":"[11:30:12 INF] Sending file. Request path: '/runtime.3a13b20195430b549739.js'. Physical path: '/app/ClientApp/dist/runtime.3a13b20195430b549739.js'\n","stream":"stdout","time":"2021-01-13T11:30:12.159216054Z"}
{"log":"[11:30:12 INF] HTTP GET /runtime.3a13b20195430b549739.js responded 200 in 2.6264 ms\n","stream":"stdout","time":"2021-01-13T11:30:12.159794264Z"}
{"log":"[11:30:12 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/runtime.3a13b20195430b549739.js - - - 200 2303 application/javascript 3.8742ms\n","stream":"stdout","time":"2021-01-13T11:30:12.160702819Z"}
{"log":"[11:30:12 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/polyfills.2e89f9530eab053a7df4.js - -\n","stream":"stdout","time":"2021-01-13T11:30:12.161488944Z"}
{"log":"[11:30:12 INF] Sending file. Request path: '/polyfills.2e89f9530eab053a7df4.js'. Physical path: '/app/ClientApp/dist/polyfills.2e89f9530eab053a7df4.js'\n","stream":"stdout","time":"2021-01-13T11:30:12.162582716Z"}
{"log":"[11:30:12 INF] HTTP GET /polyfills.2e89f9530eab053a7df4.js responded 200 in 1.0949 ms\n","stream":"stdout","time":"2021-01-13T11:30:12.162846015Z"}
{"log":"[11:30:12 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/main.d7a25f9a773dfda2289a.js - -\n","stream":"stdout","time":"2021-01-13T11:30:12.163352429Z"}
{"log":"[11:30:12 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/polyfills.2e89f9530eab053a7df4.js - - - 200 36864 application/javascript 1.9926ms\n","stream":"stdout","time":"2021-01-13T11:30:12.163566769Z"}
{"log":"[11:30:12 INF] Sending file. Request path: '/styles.9da52eeded7d060fe531.css'. Physical path: '/app/ClientApp/dist/styles.9da52eeded7d060fe531.css'\n","stream":"stdout","time":"2021-01-13T11:30:12.170738971Z"}
{"log":"[11:30:12 INF] HTTP GET /styles.9da52eeded7d060fe531.css responded 200 in 15.7191 ms\n","stream":"stdout","time":"2021-01-13T11:30:12.170843382Z"}
{"log":"[11:30:12 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/styles.9da52eeded7d060fe531.css - - - 200 92168 text/css 16.3528ms\n","stream":"stdout","time":"2021-01-13T11:30:12.171042009Z"}
{"log":"[11:30:12 INF] Sending file. Request path: '/main.d7a25f9a773dfda2289a.js'. Physical path: '/app/ClientApp/dist/main.d7a25f9a773dfda2289a.js'\n","stream":"stdout","time":"2021-01-13T11:30:12.191532517Z"}
{"log":"[11:30:12 INF] HTTP GET /main.d7a25f9a773dfda2289a.js responded 200 in 28.1767 ms\n","stream":"stdout","time":"2021-01-13T11:30:12.191740852Z"}
{"log":"[11:30:12 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/main.d7a25f9a773dfda2289a.js - - - 200 850430 application/javascript 28.9687ms\n","stream":"stdout","time":"2021-01-13T11:30:12.192120854Z"}
{"log":"[11:30:12 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/4.ed2d215a463be88d77f1.js - -\n","stream":"stdout","time":"2021-01-13T11:30:12.341742632Z"}
{"log":"[11:30:12 INF] Sending file. Request path: '/4.ed2d215a463be88d77f1.js'. Physical path: '/app/ClientApp/dist/4.ed2d215a463be88d77f1.js'\n","stream":"stdout","time":"2021-01-13T11:30:12.342729758Z"}
{"log":"[11:30:12 INF] HTTP GET /4.ed2d215a463be88d77f1.js responded 200 in 1.2340 ms\n","stream":"stdout","time":"2021-01-13T11:30:12.343107316Z"}
{"log":"[11:30:12 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/4.ed2d215a463be88d77f1.js - - - 200 12745 application/javascript 1.9805ms\n","stream":"stdout","time":"2021-01-13T11:30:12.343509108Z"}
{"log":"[11:30:12 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/licenseplates/recent?pageSize=5\u0026pageNumber=0 - -\n","stream":"stdout","time":"2021-01-13T11:30:12.412547923Z"}
{"log":"[11:30:12 WRN] attempted login failed\n","stream":"stdout","time":"2021-01-13T11:30:12.591658671Z"}
{"log":"[11:30:12 INF] Failed to validate the token.\n","stream":"stdout","time":"2021-01-13T11:30:12.610123595Z"}
{"log":"Microsoft.IdentityModel.Tokens.SecurityTokenExpiredException: IDX10223: Lifetime validation failed. The token is expired. ValidTo: 'System.DateTime', Current time: 'System.DateTime'.\n","stream":"stdout","time":"2021-01-13T11:30:12.610163893Z"}
{"log":"   at Microsoft.IdentityModel.Tokens.Validators.ValidateLifetime(Nullable`1 notBefore, Nullable`1 expires, SecurityToken securityToken, TokenValidationParameters validationParameters)\n","stream":"stdout","time":"2021-01-13T11:30:12.610172833Z"}
{"log":"   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateLifetime(Nullable`1 notBefore, Nullable`1 expires, JwtSecurityToken jwtToken, TokenValidationParameters validationParameters)\n","stream":"stdout","time":"2021-01-13T11:30:12.610179538Z"}
{"log":"   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateTokenPayload(JwtSecurityToken jwtToken, TokenValidationParameters validationParameters)\n","stream":"stdout","time":"2021-01-13T11:30:12.610186172Z"}
{"log":"   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken\u0026 validatedToken)\n","stream":"stdout","time":"2021-01-13T11:30:12.610193017Z"}
{"log":"   at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()\n","stream":"stdout","time":"2021-01-13T11:30:12.610199652Z"}
{"log":"[11:30:12 INF] Bearer was not authenticated. Failure message: IDX10223: Lifetime validation failed. The token is expired. ValidTo: 'System.DateTime', Current time: 'System.DateTime'.\n","stream":"stdout","time":"2021-01-13T11:30:12.610709068Z"}
{"log":"[11:30:12 INF] Authorization failed. These requirements were not met:\n","stream":"stdout","time":"2021-01-13T11:30:12.617214642Z"}
{"log":"DenyAnonymousAuthorizationRequirement: Requires an authenticated user.\n","stream":"stdout","time":"2021-01-13T11:30:12.617252845Z"}
{"log":"[11:30:12 INF] AuthenticationScheme: Bearer was challenged.\n","stream":"stdout","time":"2021-01-13T11:30:12.627118935Z"}
{"log":"[11:30:12 INF] HTTP GET /licenseplates/recent?pageSize=5\u0026pageNumber=0 responded 401 in 214.5698 ms\n","stream":"stdout","time":"2021-01-13T11:30:12.627285505Z"}
{"log":"[11:30:12 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/licenseplates/recent?pageSize=5\u0026pageNumber=0 - - - 401 0 - 215.3850ms\n","stream":"stdout","time":"2021-01-13T11:30:12.62811074Z"}
{"log":"[11:30:16 INF] Request starting HTTP/1.1 POST http://10.200.200.18:3859/users/authenticate application/json 42\n","stream":"stdout","time":"2021-01-13T11:30:16.783249648Z"}
{"log":"[11:30:16 INF] CORS policy execution successful.\n","stream":"stdout","time":"2021-01-13T11:30:16.786398058Z"}
{"log":"[11:30:16 INF] Executing endpoint 'OpenAlprWebhookProcessor.Users.UsersController.Authenticate (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-13T11:30:16.796008183Z"}
{"log":"[11:30:16 INF] Route matched with {action = \"Authenticate\", controller = \"Users\"}. Executing controller action with signature Microsoft.AspNetCore.Mvc.IActionResult Authenticate(OpenAlprWebhookProcessor.Users.AuthenticateRequest) on controller OpenAlprWebhookProcessor.Users.UsersController (OpenAlprWebhookProcessor).\n","stream":"stdout","time":"2021-01-13T11:30:16.841994879Z"}
{"log":"[11:30:16 INF] Entity Framework Core 5.0.2 initialized 'UsersContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-13T11:30:16.958876541Z"}
{"log":"[11:30:17 INF] Executed DbCommand (5ms) [Parameters=[@__model_Username_0='?' (Size = 6)], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-13T11:30:17.446095702Z"}
{"log":"SELECT \"t\".\"Id\", \"t\".\"FirstName\", \"t\".\"LastName\", \"t\".\"PasswordHash\", \"t\".\"PasswordSalt\", \"t\".\"Username\", \"r\".\"Id\", \"r\".\"Created\", \"r\".\"CreatedByIp\", \"r\".\"Expires\", \"r\".\"ReplacedByToken\", \"r\".\"Revoked\", \"r\".\"RevokedByIp\", \"r\".\"Token\", \"r\".\"UserId\"\n","stream":"stdout","time":"2021-01-13T11:30:17.446148222Z"}
{"log":"FROM (\n","stream":"stdout","time":"2021-01-13T11:30:17.446166171Z"}
{"log":"    SELECT \"u\".\"Id\", \"u\".\"FirstName\", \"u\".\"LastName\", \"u\".\"PasswordHash\", \"u\".\"PasswordSalt\", \"u\".\"Username\"\n","stream":"stdout","time":"2021-01-13T11:30:17.44617539Z"}
{"log":"    FROM \"Users\" AS \"u\"\n","stream":"stdout","time":"2021-01-13T11:30:17.446185517Z"}
{"log":"    WHERE \"u\".\"Username\" = @__model_Username_0\n","stream":"stdout","time":"2021-01-13T11:30:17.446196132Z"}
{"log":"    LIMIT 2\n","stream":"stdout","time":"2021-01-13T11:30:17.446204932Z"}
{"log":") AS \"t\"\n","stream":"stdout","time":"2021-01-13T11:30:17.446213104Z"}
{"log":"LEFT JOIN \"RefreshToken\" AS \"r\" ON \"t\".\"Id\" = \"r\".\"UserId\"\n","stream":"stdout","time":"2021-01-13T11:30:17.446221904Z"}
{"log":"ORDER BY \"t\".\"Id\", \"r\".\"Id\"\n","stream":"stdout","time":"2021-01-13T11:30:17.446231611Z"}
{"log":"[11:30:17 INF] Executed DbCommand (2ms) [Parameters=[@p0='?', @p1='?' (Size = 13), @p2='?', @p3='?', @p4='?', @p5='?', @p6='?' (Size = 88), @p7='?'], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-13T11:30:17.831926969Z"}
{"log":"INSERT INTO \"RefreshToken\" (\"Created\", \"CreatedByIp\", \"Expires\", \"ReplacedByToken\", \"Revoked\", \"RevokedByIp\", \"Token\", \"UserId\")\n","stream":"stdout","time":"2021-01-13T11:30:17.831968873Z"}
{"log":"VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7);\n","stream":"stdout","time":"2021-01-13T11:30:17.831983819Z"}
{"log":"SELECT \"Id\"\n","stream":"stdout","time":"2021-01-13T11:30:17.83199632Z"}
{"log":"FROM \"RefreshToken\"\n","stream":"stdout","time":"2021-01-13T11:30:17.832007146Z"}
{"log":"WHERE changes() = 1 AND \"rowid\" = last_insert_rowid();\n","stream":"stdout","time":"2021-01-13T11:30:17.832016644Z"}
{"log":"[11:30:17 INF] Executed DbCommand (1ms) [Parameters=[@p5='?', @p0='?' (Size = 6), @p1='?' (Size = 7), @p2='?' (Size = 64), @p3='?' (Size = 128), @p4='?' (Size = 6)], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-13T11:30:17.863745539Z"}
{"log":"UPDATE \"Users\" SET \"FirstName\" = @p0, \"LastName\" = @p1, \"PasswordHash\" = @p2, \"PasswordSalt\" = @p3, \"Username\" = @p4\n","stream":"stdout","time":"2021-01-13T11:30:17.863785837Z"}
{"log":"WHERE \"Id\" = @p5;\n","stream":"stdout","time":"2021-01-13T11:30:17.863799665Z"}
{"log":"SELECT changes();\n","stream":"stdout","time":"2021-01-13T11:30:17.86381063Z"}
{"log":"[11:30:17 INF] Executing OkObjectResult, writing value of type 'OpenAlprWebhookProcessor.Users.AuthenticateResponse'.\n","stream":"stdout","time":"2021-01-13T11:30:17.900475573Z"}
{"log":"[11:30:17 INF] Executed action OpenAlprWebhookProcessor.Users.UsersController.Authenticate (OpenAlprWebhookProcessor) in 1086.6082ms\n","stream":"stdout","time":"2021-01-13T11:30:17.935446115Z"}
{"log":"[11:30:17 INF] Executed endpoint 'OpenAlprWebhookProcessor.Users.UsersController.Authenticate (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-13T11:30:17.935561632Z"}
{"log":"[11:30:17 INF] HTTP POST /users/authenticate responded 200 in 1152.3829 ms\n","stream":"stdout","time":"2021-01-13T11:30:17.935928713Z"}
{"log":"[11:30:17 INF] Request finished HTTP/1.1 POST http://10.200.200.18:3859/users/authenticate application/json 42 - 200 - application/json;+charset=utf-8 1154.8934ms\n","stream":"stdout","time":"2021-01-13T11:30:17.937880127Z"}
{"log":"[11:30:18 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/licenseplates/recent?pageSize=5\u0026pageNumber=0 - -\n","stream":"stdout","time":"2021-01-13T11:30:18.015658225Z"}
{"log":"[11:30:18 WRN] attempted login failed\n","stream":"stdout","time":"2021-01-13T11:30:18.036897773Z"}
{"log":"[11:30:18 INF] Successfully validated the token.\n","stream":"stdout","time":"2021-01-13T11:30:18.037427095Z"}
{"log":"[11:30:18 INF] Authorization was successful.\n","stream":"stdout","time":"2021-01-13T11:30:18.040153459Z"}
{"log":"[11:30:18 INF] Executing endpoint 'OpenAlprWebhookProcessor.LicensePlates.LicensePlatesController.GetRecent (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-13T11:30:18.040393291Z"}
{"log":"[11:30:18 INF] Route matched with {action = \"GetRecent\", controller = \"LicensePlates\"}. Executing controller action with signature System.Threading.Tasks.Task`1[OpenAlprWebhookProcessor.LicensePlates.GetLicensePlate.GetLicensePlateResponse] GetRecent(System.Threading.CancellationToken, Int32, Int32) on controller OpenAlprWebhookProcessor.LicensePlates.LicensePlatesController (OpenAlprWebhookProcessor).\n","stream":"stdout","time":"2021-01-13T11:30:18.051019036Z"}
{"log":"[11:30:18 INF] recent plates request received num: 5 page 0\n","stream":"stdout","time":"2021-01-13T11:30:18.066491015Z"}
{"log":"[11:30:18 INF] Entity Framework Core 5.0.2 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-13T11:30:18.071539437Z"}
{"log":"[11:30:18 INF] Executed DbCommand (8ms) [Parameters=[@__p_1='?', @__p_0='?'], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-13T11:30:18.128892187Z"}
{"log":"SELECT \"p\".\"Id\", \"p\".\"AlertDescription\", \"p\".\"Confidence\", \"p\".\"Direction\", \"p\".\"IsAlert\", \"p\".\"Jpeg\", \"p\".\"Number\", \"p\".\"OpenAlprCameraId\", \"p\".\"OpenAlprProcessingTimeMs\", \"p\".\"OpenAlprUuid\", \"p\".\"PlateCoordinates\", \"p\".\"ReceivedOnEpoch\", \"p\".\"VehicleDescription\"\n","stream":"stdout","time":"2021-01-13T11:30:18.128931158Z"}
{"log":"FROM \"PlateGroups\" AS \"p\"\n","stream":"stdout","time":"2021-01-13T11:30:18.128943311Z"}
{"log":"ORDER BY \"p\".\"ReceivedOnEpoch\" DESC\n","stream":"stdout","time":"2021-01-13T11:30:18.128952111Z"}
{"log":"LIMIT @__p_1 OFFSET @__p_0\n","stream":"stdout","time":"2021-01-13T11:30:18.12896133Z"}
{"log":"[11:30:18 INF] Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-13T11:30:18.2308409Z"}
{"log":"SELECT COUNT(*)\n","stream":"stdout","time":"2021-01-13T11:30:18.230892862Z"}
{"log":"FROM \"PlateGroups\" AS \"p\"\n","stream":"stdout","time":"2021-01-13T11:30:18.230906481Z"}
{"log":"[11:30:18 INF] Executing ObjectResult, writing value of type 'OpenAlprWebhookProcessor.LicensePlates.GetLicensePlate.GetLicensePlateResponse'.\n","stream":"stdout","time":"2021-01-13T11:30:18.232952249Z"}
{"log":"[11:30:18 INF] Executed action OpenAlprWebhookProcessor.LicensePlates.LicensePlatesController.GetRecent (OpenAlprWebhookProcessor) in 205.8696ms\n","stream":"stdout","time":"2021-01-13T11:30:18.257118464Z"}
{"log":"[11:30:18 INF] Executed endpoint 'OpenAlprWebhookProcessor.LicensePlates.LicensePlatesController.GetRecent (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-13T11:30:18.25722951Z"}
{"log":"[11:30:18 INF] HTTP GET /licenseplates/recent?pageSize=5\u0026pageNumber=0 responded 200 in 241.6123 ms\n","stream":"stdout","time":"2021-01-13T11:30:18.257574033Z"}
{"log":"[11:30:18 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/licenseplates/recent?pageSize=5\u0026pageNumber=0 - - - 200 - application/json;+charset=utf-8 242.1392ms\n","stream":"stdout","time":"2021-01-13T11:30:18.257597919Z"}
{"log":"[11:30:47 INF] Request starting HTTP/1.1 POST http://10.200.200.18:3859/hydration/start application/json 2\n","stream":"stdout","time":"2021-01-13T11:30:47.639763147Z"}
{"log":"[11:30:47 INF] CORS policy execution successful.\n","stream":"stdout","time":"2021-01-13T11:30:47.639821115Z"}
{"log":"[11:30:47 WRN] attempted login failed\n","stream":"stdout","time":"2021-01-13T11:30:47.639837457Z"}
{"log":"[11:30:47 INF] Successfully validated the token.\n","stream":"stdout","time":"2021-01-13T11:30:47.639850867Z"}
{"log":"[11:30:47 INF] Authorization was successful.\n","stream":"stdout","time":"2021-01-13T11:30:47.639978046Z"}
{"log":"[11:30:47 INF] Executing endpoint 'OpenAlprWebhookProcessor.Hydrator.HydrationController.StartHydration (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-13T11:30:47.640256361Z"}
{"log":"[11:30:47 INF] Route matched with {action = \"StartHydration\", controller = \"Hydration\"}. Executing controller action with signature Microsoft.AspNetCore.Mvc.IActionResult StartHydration() on controller OpenAlprWebhookProcessor.Hydrator.HydrationController (OpenAlprWebhookProcessor).\n","stream":"stdout","time":"2021-01-13T11:30:47.643947292Z"}
{"log":"[11:30:47 INF] Executing HttpStatusCodeResult, setting HTTP status code 202\n","stream":"stdout","time":"2021-01-13T11:30:47.657218596Z"}
{"log":"[11:30:47 INF] Executed action OpenAlprWebhookProcessor.Hydrator.HydrationController.StartHydration (OpenAlprWebhookProcessor) in 13.6934ms\n","stream":"stdout","time":"2021-01-13T11:30:47.65776419Z"}
{"log":"[11:30:47 INF] Executed endpoint 'OpenAlprWebhookProcessor.Hydrator.HydrationController.StartHydration (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-13T11:30:47.657950455Z"}
{"log":"[11:30:47 INF] HTTP POST /hydration/start responded 202 in 23.1824 ms\n","stream":"stdout","time":"2021-01-13T11:30:47.658807608Z"}
{"log":"[11:30:47 INF] Request finished HTTP/1.1 POST http://10.200.200.18:3859/hydration/start application/json 2 - 202 0 - 25.3520ms\n","stream":"stdout","time":"2021-01-13T11:30:47.660052585Z"}
{"log":"[11:30:47 INF] searching for first license plate\n","stream":"stdout","time":"2021-01-13T11:30:47.674207161Z"}
{"log":"[11:30:47 INF] searching from: 2019-05-05T00:00:00 to 2019-05-06T00:00:00\n","stream":"stdout","time":"2021-01-13T11:30:47.674256609Z"}
{"log":"[11:30:48 ERR] failed to get earliest plate date request: Method: GET, RequestUri: 'https://cloud.openalpr.com/api/search/plate?api_key=8f9172c7315c5a22a93732b8751559b6cff09922\u0026start=2019-05-05T00:00:00\u0026end=2019-05-06T00:00:00', Version: 1.1, Content: \u003cnull\u003e, Headers:\n","stream":"stdout","time":"2021-01-13T11:30:48.16917233Z"}
{"log":"{\n","stream":"stdout","time":"2021-01-13T11:30:48.169211231Z"}
{"log":"  traceparent: 00-2445d59d8639ed48bc0b7216dba6aaca-ba30bb39ca41db4b-00\n","stream":"stdout","time":"2021-01-13T11:30:48.169223872Z"}
{"log":"} response: API Access only available for commercial accounts\n","stream":"stdout","time":"2021-01-13T11:30:48.169237072Z"}
{"log":"[11:30:48 ERR] failed to get earliest plate date\n","stream":"stdout","time":"2021-01-13T11:30:48.182349629Z"}
{"log":"System.Text.Json.JsonException: 'A' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.\n","stream":"stdout","time":"2021-01-13T11:30:48.182388041Z"}
{"log":" ---\u003e System.Text.Json.JsonReaderException: 'A' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0.\n","stream":"stdout","time":"2021-01-13T11:30:48.182399146Z"}
{"log":"   at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader\u0026 json, ExceptionResource resource, Byte nextByte, ReadOnlySpan`1 bytes)\n","stream":"stdout","time":"2021-01-13T11:30:48.182408365Z"}
{"log":"   at System.Text.Json.Utf8JsonReader.ConsumeValue(Byte marker)\n","stream":"stdout","time":"2021-01-13T11:30:48.182417583Z"}
{"log":"   at System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte first)\n","stream":"stdout","time":"2021-01-13T11:30:48.182427431Z"}
{"log":"   at System.Text.Json.Utf8JsonReader.ReadSingleSegment()\n","stream":"stdout","time":"2021-01-13T11:30:48.182436091Z"}
{"log":"   at System.Text.Json.Utf8JsonReader.Read()\n","stream":"stdout","time":"2021-01-13T11:30:48.182444402Z"}
{"log":"   at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader\u0026 reader, JsonSerializerOptions options, ReadStack\u0026 state)\n","stream":"stdout","time":"2021-01-13T11:30:48.182453412Z"}
{"log":"   --- End of inner exception stack trace ---\n","stream":"stdout","time":"2021-01-13T11:30:48.182462421Z"}
{"log":"   at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack\u0026 state, JsonReaderException ex)\n","stream":"stdout","time":"2021-01-13T11:30:48.182510611Z"}
{"log":"   at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader\u0026 reader, JsonSerializerOptions options, ReadStack\u0026 state)\n","stream":"stdout","time":"2021-01-13T11:30:48.182518992Z"}
{"log":"   at System.Text.Json.JsonSerializer.ReadCore[TValue](JsonConverter jsonConverter, Utf8JsonReader\u0026 reader, JsonSerializerOptions options, ReadStack\u0026 state)\n","stream":"stdout","time":"2021-01-13T11:30:48.182525278Z"}
{"log":"   at System.Text.Json.JsonSerializer.ReadCore[TValue](Utf8JsonReader\u0026 reader, Type returnType, JsonSerializerOptions options)\n","stream":"stdout","time":"2021-01-13T11:30:48.182531424Z"}
{"log":"   at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, Type returnType, JsonSerializerOptions options)\n","stream":"stdout","time":"2021-01-13T11:30:48.182538966Z"}
{"log":"   at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)\n","stream":"stdout","time":"2021-01-13T11:30:48.182544833Z"}
{"log":"   at OpenAlprWebhookProcessor.Hydrator.HydrationService.FindEarliestPlateGroupAsync(DateTimeOffset dateRangeStart, HttpClient httpClient) in /src/Hydration/HydrationService.cs:line 199\n","stream":"stdout","time":"2021-01-13T11:30:48.182550839Z"}
{"log":"[11:31:24 INF] Application is shutting down...\n","stream":"stdout","time":"2021-01-13T11:31:24.981727693Z"}
 
I've noticed that when you do a docker stop on the service, if an overlay is currently displayed on the camera it will stay on the camera when the program is terminated. I've had to log onto the camera a few times to manually clear the overlay. I know Docker only gives a handful of seconds for containers to terminate and it will force kill them after that time has expired so its probably not worth adding any kind of logic to hurry up and clear an overlay once a stop command is received. But it may be worth adding some logic at service startup that clears the overlay first. That way a simple service restart would clear any stuck overlays
 
ah {"log":"} response: API Access only available for commercial accounts\n","stream":"stdout","time":"2021-01-13T11:30:48.169237072Z"}
 
depending on how many plates you have might be worth upgrading to commercial for a month then back down, otherwise looks like it will only work for on prem installs :(
 
Yeah I think I'm ok with that to be honest since I didn't have many plates and just finished up the trial. Its been more about getting camera placement and settings dialed in than plate collection for me at this point. My trial ended yesterday so I signed up for the $5/month package. They deleted all plates past 5 days as soon as I signed up for the Home Package so there is not much to Hydrate with at this point anyway.
 
Just got an email from OpenALPR saying they are rebranding Watchman as Rekor Scout. Not sure what it means currently other than a name change.

Email says the new service/website launches tonight at 7pm Central.
 
I skipped to version v2.1.3-alpha. Overlay clear is working great. I tested by stopping the container once an overlay was present. There wasn't enough time for the service to clear it before Docker shut it down, but upon restart, the overlay was cleared. Awesome!
 
how are you killing the container? docker asks the container to turn off and usually gives it a few seconds to comply.
 
how are you killing the container? docker asks the container to turn off and usually gives it a few seconds to comply.
Just docker stop ... Docker is pretty ruthless when it comes to shutting down a container.
 
Any way to change the log out time out on the webpage? It must be hard coded to time out after X minutes even if you are doing something. I'll be clicking through looking at plates and then all of a sudden I'm logged out forcefully and have to log back in. Is it possible to make it stay logged in all the time?
 
This looks amazing, thanks for all the hard work

Is there any plans to add in alerts? The 5 alerts are one of the main issues I have with the home service
 
I think the appsettings.example.json is missing the "UsersContext": "Data Source=config/users.db" line. Should help alleviate some issues for new users. :)