OpenALPR Webhook Processor for IP Cameras

you shouldn't ever need to delete the databases, the application handles migrating to newer schemas automatically. it looks like the payload might be reversed, try the next alpha.
 
Time looks good! I'm still not getting a plate crop though. Give me a minute and I can get a log.Screenshot from 2021-01-12 08-55-52.png
 
Here is the log of the 2.0.5 alpha:

JSON:
{"log":"[14:55:01 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-12T14:55:01.667461797Z"}
{"log":"[14:55:01 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-12T14:55:01.668089664Z"}
{"log":"[14:55:01 INF] Creating key {1838a894-313b-4c34-a8e5-ca70f7e10a50} with creation date 2021-01-12 14:55:01Z, activation date 2021-01-12 14:55:01Z, and expiration date 2021-04-12 14:55:01Z.\n","stream":"stdout","time":"2021-01-12T14:55:01.700070903Z"}
{"log":"[14:55:01 WRN] No XML encryptor configured. Key {1838a894-313b-4c34-a8e5-ca70f7e10a50} may be persisted to storage in unencrypted form.\n","stream":"stdout","time":"2021-01-12T14:55:01.717760393Z"}
{"log":"[14:55:01 INF] Writing data to file '/root/.aspnet/DataProtection-Keys/key-1838a894-313b-4c34-a8e5-ca70f7e10a50.xml'.\n","stream":"stdout","time":"2021-01-12T14:55:01.72261899Z"}
{"log":"[14:55:02 INF] Entity Framework Core 5.0.1 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-12T14:55:02.613344312Z"}
{"log":"[14:55:02 INF] Executed DbCommand (15ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:55:02.797002574Z"}
{"log":"SELECT COUNT(*) FROM \"sqlite_master\" WHERE \"name\" = '__EFMigrationsHistory' AND \"type\" = 'table';\n","stream":"stdout","time":"2021-01-12T14:55:02.797033304Z"}
{"log":"[14:55:02 INF] Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:55:02.838664829Z"}
{"log":"SELECT \"MigrationId\", \"ProductVersion\"\n","stream":"stdout","time":"2021-01-12T14:55:02.838696187Z"}
{"log":"FROM \"__EFMigrationsHistory\"\n","stream":"stdout","time":"2021-01-12T14:55:02.838709596Z"}
{"log":"ORDER BY \"MigrationId\";\n","stream":"stdout","time":"2021-01-12T14:55:02.838719723Z"}
{"log":"[14:55:03 INF] Entity Framework Core 5.0.1 initialized 'UsersContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-12T14:55:03.153596621Z"}
{"log":"[14:55:03 INF] Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:55:03.155932996Z"}
{"log":"SELECT COUNT(*) FROM \"sqlite_master\" WHERE \"name\" = '__EFMigrationsHistory' AND \"type\" = 'table';\n","stream":"stdout","time":"2021-01-12T14:55:03.15596212Z"}
{"log":"[14:55:03 INF] Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:55:03.160072584Z"}
{"log":"SELECT \"MigrationId\", \"ProductVersion\"\n","stream":"stdout","time":"2021-01-12T14:55:03.160101289Z"}
{"log":"FROM \"__EFMigrationsHistory\"\n","stream":"stdout","time":"2021-01-12T14:55:03.160111765Z"}
{"log":"ORDER BY \"MigrationId\";\n","stream":"stdout","time":"2021-01-12T14:55:03.160120355Z"}
{"log":"[14:55:03 INF] Now listening on: http://[::]:80\n","stream":"stdout","time":"2021-01-12T14:55:03.370782461Z"}
{"log":"[14:55:03 INF] Application started. Press Ctrl+C to shut down.\n","stream":"stdout","time":"2021-01-12T14:55:03.370846505Z"}
{"log":"[14:55:03 INF] Hosting environment: Production\n","stream":"stdout","time":"2021-01-12T14:55:03.370856352Z"}
{"log":"[14:55:03 INF] Content root path: /app\n","stream":"stdout","time":"2021-01-12T14:55:03.370864035Z"}
{"log":"[14:55:10 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/ - -\n","stream":"stdout","time":"2021-01-12T14:55:10.021239073Z"}
{"log":"[14:55:10 INF] Sending file. Request path: '/index.html'. Physical path: '/app/ClientApp/dist/index.html'\n","stream":"stdout","time":"2021-01-12T14:55:10.192851936Z"}
{"log":"[14:55:10 INF] HTTP GET / responded 200 in 171.3621 ms\n","stream":"stdout","time":"2021-01-12T14:55:10.198963821Z"}
{"log":"[14:55:10 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/ - - - 200 6976 text/html 190.6281ms\n","stream":"stdout","time":"2021-01-12T14:55:10.203906925Z"}
{"log":"[14:55:10 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/main.00a9e6b48719aa3c98ee.js - -\n","stream":"stdout","time":"2021-01-12T14:55:10.349585134Z"}
{"log":"[14:55:10 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/runtime.3a13b20195430b549739.js - -\n","stream":"stdout","time":"2021-01-12T14:55:10.355691432Z"}
{"log":"[14:55:10 INF] Sending file. Request path: '/runtime.3a13b20195430b549739.js'. Physical path: '/app/ClientApp/dist/runtime.3a13b20195430b549739.js'\n","stream":"stdout","time":"2021-01-12T14:55:10.358084169Z"}
{"log":"[14:55:10 INF] HTTP GET /runtime.3a13b20195430b549739.js responded 200 in 2.2119 ms\n","stream":"stdout","time":"2021-01-12T14:55:10.358347328Z"}
{"log":"[14:55:10 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/runtime.3a13b20195430b549739.js - - - 200 2303 application/javascript 3.3580ms\n","stream":"stdout","time":"2021-01-12T14:55:10.35881498Z"}
{"log":"[14:55:10 INF] Sending file. Request path: '/main.00a9e6b48719aa3c98ee.js'. Physical path: '/app/ClientApp/dist/main.00a9e6b48719aa3c98ee.js'\n","stream":"stdout","time":"2021-01-12T14:55:10.388132431Z"}
{"log":"[14:55:10 INF] HTTP GET /main.00a9e6b48719aa3c98ee.js responded 200 in 38.5658 ms\n","stream":"stdout","time":"2021-01-12T14:55:10.388312619Z"}
{"log":"[14:55:10 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/main.00a9e6b48719aa3c98ee.js - - - 200 849377 application/javascript 39.3037ms\n","stream":"stdout","time":"2021-01-12T14:55:10.388533316Z"}
{"log":"[14:55:10 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-12T14:55:10.536186056Z"}
{"log":"[14:55:10 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/favicon.ico - -\n","stream":"stdout","time":"2021-01-12T14:55:10.584660976Z"}
{"log":"[14:55:10 INF] Sending file. Request path: '/favicon.ico'. Physical path: '/app/wwwroot/favicon.ico'\n","stream":"stdout","time":"2021-01-12T14:55:10.586297339Z"}
{"log":"[14:55:10 INF] HTTP GET /favicon.ico responded 200 in 1.4809 ms\n","stream":"stdout","time":"2021-01-12T14:55:10.586560289Z"}
{"log":"[14:55:10 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/favicon.ico - - - 200 5430 image/x-icon 2.3363ms\n","stream":"stdout","time":"2021-01-12T14:55:10.586859765Z"}
{"log":"[14:55:10 WRN] attempted login failed\n","stream":"stdout","time":"2021-01-12T14:55:10.766726942Z"}
{"log":"[14:55:10 INF] Failed to validate the token.\n","stream":"stdout","time":"2021-01-12T14:55:10.786311975Z"}
{"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-12T14:55:10.786351993Z"}
{"log":"   at Microsoft.IdentityModel.Tokens.Validators.ValidateLifetime(Nullable`1 notBefore, Nullable`1 expires, SecurityToken securityToken, TokenValidationParameters validationParameters)\n","stream":"stdout","time":"2021-01-12T14:55:10.786365822Z"}
{"log":"   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateLifetime(Nullable`1 notBefore, Nullable`1 expires, JwtSecurityToken jwtToken, TokenValidationParameters validationParameters)\n","stream":"stdout","time":"2021-01-12T14:55:10.786378603Z"}
{"log":"   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateTokenPayload(JwtSecurityToken jwtToken, TokenValidationParameters validationParameters)\n","stream":"stdout","time":"2021-01-12T14:55:10.786389079Z"}
{"log":"   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken\u0026 validatedToken)\n","stream":"stdout","time":"2021-01-12T14:55:10.78640165Z"}
{"log":"   at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()\n","stream":"stdout","time":"2021-01-12T14:55:10.786413174Z"}
{"log":"[14:55:10 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-12T14:55:10.786880826Z"}
{"log":"[14:55:10 INF] Authorization failed. These requirements were not met:\n","stream":"stdout","time":"2021-01-12T14:55:10.792744009Z"}
{"log":"DenyAnonymousAuthorizationRequirement: Requires an authenticated user.\n","stream":"stdout","time":"2021-01-12T14:55:10.792775786Z"}
{"log":"[14:55:10 INF] AuthenticationScheme: Bearer was challenged.\n","stream":"stdout","time":"2021-01-12T14:55:10.804852262Z"}
{"log":"[14:55:10 INF] HTTP GET /licenseplates/recent?pageSize=5\u0026pageNumber=0 responded 401 in 268.4658 ms\n","stream":"stdout","time":"2021-01-12T14:55:10.804991036Z"}
{"log":"[14:55:10 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/licenseplates/recent?pageSize=5\u0026pageNumber=0 - - - 401 0 - 269.3323ms\n","stream":"stdout","time":"2021-01-12T14:55:10.805402047Z"}
{"log":"[14:55:10 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/4.ed2d215a463be88d77f1.js - -\n","stream":"stdout","time":"2021-01-12T14:55:10.902085095Z"}
{"log":"[14:55:10 INF] Sending file. Request path: '/4.ed2d215a463be88d77f1.js'. Physical path: '/app/ClientApp/dist/4.ed2d215a463be88d77f1.js'\n","stream":"stdout","time":"2021-01-12T14:55:10.90277498Z"}
{"log":"[14:55:10 INF] HTTP GET /4.ed2d215a463be88d77f1.js responded 200 in 0.7802 ms\n","stream":"stdout","time":"2021-01-12T14:55:10.902944203Z"}
{"log":"[14:55:10 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/4.ed2d215a463be88d77f1.js - - - 200 12745 application/javascript 1.2398ms\n","stream":"stdout","time":"2021-01-12T14:55:10.903152328Z"}
{"log":"[14:55:14 INF] Request starting HTTP/1.1 POST http://10.200.200.18:3859/users/authenticate application/json 42\n","stream":"stdout","time":"2021-01-12T14:55:14.731341042Z"}
{"log":"[14:55:14 INF] CORS policy execution successful.\n","stream":"stdout","time":"2021-01-12T14:55:14.740767978Z"}
{"log":"[14:55:14 INF] Executing endpoint 'OpenAlprWebhookProcessor.Users.UsersController.Authenticate (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:55:14.748920673Z"}
{"log":"[14:55:14 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-12T14:55:14.802021131Z"}
{"log":"[14:55:14 INF] Entity Framework Core 5.0.1 initialized 'UsersContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-12T14:55:14.933390551Z"}
{"log":"[14:55:15 INF] Executed DbCommand (9ms) [Parameters=[@__model_Username_0='?' (Size = 6)], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:55:15.603641303Z"}
{"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-12T14:55:15.60369515Z"}
{"log":"FROM (\n","stream":"stdout","time":"2021-01-12T14:55:15.603714496Z"}
{"log":"    SELECT \"u\".\"Id\", \"u\".\"FirstName\", \"u\".\"LastName\", \"u\".\"PasswordHash\", \"u\".\"PasswordSalt\", \"u\".\"Username\"\n","stream":"stdout","time":"2021-01-12T14:55:15.603723296Z"}
{"log":"    FROM \"Users\" AS \"u\"\n","stream":"stdout","time":"2021-01-12T14:55:15.603733702Z"}
{"log":"    WHERE \"u\".\"Username\" = @__model_Username_0\n","stream":"stdout","time":"2021-01-12T14:55:15.603741734Z"}
{"log":"    LIMIT 2\n","stream":"stdout","time":"2021-01-12T14:55:15.603749626Z"}
{"log":") AS \"t\"\n","stream":"stdout","time":"2021-01-12T14:55:15.6037784Z"}
{"log":"LEFT JOIN \"RefreshToken\" AS \"r\" ON \"t\".\"Id\" = \"r\".\"UserId\"\n","stream":"stdout","time":"2021-01-12T14:55:15.603787829Z"}
{"log":"ORDER BY \"t\".\"Id\", \"r\".\"Id\"\n","stream":"stdout","time":"2021-01-12T14:55:15.603797397Z"}
{"log":"[14:55:16 INF] Executed DbCommand (4ms) [Parameters=[@p0='?', @p1='?' (Size = 13), @p2='?', @p3='?', @p4='?', @p5='?', @p6='?' (Size = 88), @p7='?'], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:55:16.365996846Z"}
{"log":"INSERT INTO \"RefreshToken\" (\"Created\", \"CreatedByIp\", \"Expires\", \"ReplacedByToken\", \"Revoked\", \"RevokedByIp\", \"Token\", \"UserId\")\n","stream":"stdout","time":"2021-01-12T14:55:16.366037004Z"}
{"log":"VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7);\n","stream":"stdout","time":"2021-01-12T14:55:16.366055023Z"}
{"log":"SELECT \"Id\"\n","stream":"stdout","time":"2021-01-12T14:55:16.366135899Z"}
{"log":"FROM \"RefreshToken\"\n","stream":"stdout","time":"2021-01-12T14:55:16.366144489Z"}
{"log":"WHERE changes() = 1 AND \"rowid\" = last_insert_rowid();\n","stream":"stdout","time":"2021-01-12T14:55:16.36615294Z"}
{"log":"[14:55:16 INF] Executed DbCommand (2ms) [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-12T14:55:16.430060243Z"}
{"log":"UPDATE \"Users\" SET \"FirstName\" = @p0, \"LastName\" = @p1, \"PasswordHash\" = @p2, \"PasswordSalt\" = @p3, \"Username\" = @p4\n","stream":"stdout","time":"2021-01-12T14:55:16.430097468Z"}
{"log":"WHERE \"Id\" = @p5;\n","stream":"stdout","time":"2021-01-12T14:55:16.430111506Z"}
{"log":"SELECT changes();\n","stream":"stdout","time":"2021-01-12T14:55:16.430120445Z"}
{"log":"[14:55:16 INF] Executing OkObjectResult, writing value of type 'OpenAlprWebhookProcessor.Users.AuthenticateResponse'.\n","stream":"stdout","time":"2021-01-12T14:55:16.496641111Z"}
{"log":"[14:55:16 INF] Executed action OpenAlprWebhookProcessor.Users.UsersController.Authenticate (OpenAlprWebhookProcessor) in 1744.9292ms\n","stream":"stdout","time":"2021-01-12T14:55:16.557837623Z"}
{"log":"[14:55:16 INF] Executed endpoint 'OpenAlprWebhookProcessor.Users.UsersController.Authenticate (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:55:16.557947971Z"}
{"log":"[14:55:16 INF] HTTP POST /users/authenticate responded 200 in 1826.7274 ms\n","stream":"stdout","time":"2021-01-12T14:55:16.558185918Z"}
{"log":"[14:55:16 INF] Request finished HTTP/1.1 POST http://10.200.200.18:3859/users/authenticate application/json 42 - 200 - application/json;+charset=utf-8 1830.6601ms\n","stream":"stdout","time":"2021-01-12T14:55:16.561432036Z"}
{"log":"[14:55:16 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-12T14:55:16.671802641Z"}
{"log":"[14:55:16 WRN] attempted login failed\n","stream":"stdout","time":"2021-01-12T14:55:16.712654466Z"}
{"log":"[14:55:16 INF] Successfully validated the token.\n","stream":"stdout","time":"2021-01-12T14:55:16.71324811Z"}
{"log":"[14:55:16 INF] Authorization was successful.\n","stream":"stdout","time":"2021-01-12T14:55:16.725497442Z"}
{"log":"[14:55:16 INF] Executing endpoint 'OpenAlprWebhookProcessor.LicensePlates.LicensePlatesController.GetRecent (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:55:16.725798106Z"}
{"log":"[14:55:16 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-12T14:55:16.742399271Z"}
{"log":"[14:55:16 INF] Entity Framework Core 5.0.1 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-12T14:55:16.80636091Z"}
{"log":"[14:55:16 INF] Executed DbCommand (10ms) [Parameters=[@__p_1='?', @__p_0='?'], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:55:16.94227597Z"}
{"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-12T14:55:16.94232863Z"}
{"log":"FROM \"PlateGroups\" AS \"p\"\n","stream":"stdout","time":"2021-01-12T14:55:16.942343366Z"}
{"log":"ORDER BY \"p\".\"ReceivedOnEpoch\" DESC\n","stream":"stdout","time":"2021-01-12T14:55:16.942352794Z"}
{"log":"LIMIT @__p_1 OFFSET @__p_0\n","stream":"stdout","time":"2021-01-12T14:55:16.942361664Z"}
{"log":"[14:55:17 INF] Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:55:17.159229658Z"}
{"log":"SELECT COUNT(*)\n","stream":"stdout","time":"2021-01-12T14:55:17.159268419Z"}
{"log":"FROM \"PlateGroups\" AS \"p\"\n","stream":"stdout","time":"2021-01-12T14:55:17.159276451Z"}
{"log":"[14:55:17 INF] Executing ObjectResult, writing value of type 'OpenAlprWebhookProcessor.LicensePlates.GetLicensePlate.GetLicensePlateResponse'.\n","stream":"stdout","time":"2021-01-12T14:55:17.162723919Z"}
{"log":"[14:55:17 INF] Executed action OpenAlprWebhookProcessor.LicensePlates.LicensePlatesController.GetRecent (OpenAlprWebhookProcessor) in 453.856ms\n","stream":"stdout","time":"2021-01-12T14:55:17.196853802Z"}
{"log":"[14:55:17 INF] Executed endpoint 'OpenAlprWebhookProcessor.LicensePlates.LicensePlatesController.GetRecent (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:55:17.197370342Z"}
{"log":"[14:55:17 INF] HTTP GET /licenseplates/recent?pageSize=5\u0026pageNumber=0 responded 200 in 525.6748 ms\n","stream":"stdout","time":"2021-01-12T14:55:17.1977523Z"}
{"log":"[14:55:17 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 526.8933ms\n","stream":"stdout","time":"2021-01-12T14:55:17.198721198Z"}
{"log":"[14:55:19 INF] Request starting HTTP/1.1 POST http://<redacted>:3859/webhook application/json 16746\n","stream":"stdout","time":"2021-01-12T14:55:19.977927257Z"}
{"log":"[14:55:19 INF] Executing endpoint 'OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:55:19.97955517Z"}
{"log":"[14:55:19 INF] Route matched with {action = \"Post\", controller = \"Webhook\"}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.ActionResult] Post() on controller OpenAlprWebhookProcessor.WebhookProcessor.WebhookController (OpenAlprWebhookProcessor).\n","stream":"stdout","time":"2021-01-12T14:55:19.990896994Z"}
{"log":"[14:55:20 INF] request received from: ::ffff:18.206.234.148\n","stream":"stdout","time":"2021-01-12T14:55:20.222906275Z"}
{"log":"[14:55:20 INF] adding job for plate: IHK45\n","stream":"stdout","time":"2021-01-12T14:55:20.231003796Z"}
{"log":"[14:55:20 INF] processing job for plate: IHK45\n","stream":"stdout","time":"2021-01-12T14:55:20.231501201Z"}
{"log":"[14:55:20 INF] Entity Framework Core 5.0.1 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-12T14:55:20.23456727Z"}
{"log":"[14:55:20 INF] Executed DbCommand (12ms) [Parameters=[@p0='?', @p1='?', @p2='?', @p3='?', @p4='?', @p5='?' (Size = 4760), @p6='?' (Size = 5), @p7='?', @p8='?', @p9='?' (Size = 64), @p10='?' (Size = 27), @p11='?', @p12='?' (Size = 29)], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:55:20.421368214Z"}
{"log":"INSERT INTO \"PlateGroups\" (\"Id\", \"AlertDescription\", \"Confidence\", \"Direction\", \"IsAlert\", \"Jpeg\", \"Number\", \"OpenAlprCameraId\", \"OpenAlprProcessingTimeMs\", \"OpenAlprUuid\", \"PlateCoordinates\", \"ReceivedOnEpoch\", \"VehicleDescription\")\n","stream":"stdout","time":"2021-01-12T14:55:20.421454327Z"}
{"log":"VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12);\n","stream":"stdout","time":"2021-01-12T14:55:20.421477165Z"}
{"log":"[14:55:20 INF] plate saved successfully\n","stream":"stdout","time":"2021-01-12T14:55:20.476169219Z"}
{"log":"[14:55:20 INF] Executing HttpStatusCodeResult, setting HTTP status code 200\n","stream":"stdout","time":"2021-01-12T14:55:20.49549186Z"}
{"log":"[14:55:20 INF] Executed action OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor) in 506.8786ms\n","stream":"stdout","time":"2021-01-12T14:55:20.498244136Z"}
{"log":"[14:55:20 INF] Executed endpoint 'OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:55:20.499635359Z"}
{"log":"[14:55:20 INF] HTTP POST /webhook responded 200 in 521.5533 ms\n","stream":"stdout","time":"2021-01-12T14:55:20.499798646Z"}
{"log":"[14:55:20 INF] Request finished HTTP/1.1 POST http://<redacted>:3859/webhook application/json 16746 - 200 0 - 522.4869ms\n","stream":"stdout","time":"2021-01-12T14:55:20.500232426Z"}
{"log":"[14:55:26 INF] clearing expired overlay for: 254963574\n","stream":"stdout","time":"2021-01-12T14:55:26.866647972Z"}
{"log":"[14:56:37 INF] Request starting HTTP/1.1 POST http://<redacted>:3859/webhook application/json 20708\n","stream":"stdout","time":"2021-01-12T14:56:37.794910471Z"}
{"log":"[14:56:37 INF] Executing endpoint 'OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:56:37.795520528Z"}
{"log":"[14:56:37 INF] Route matched with {action = \"Post\", controller = \"Webhook\"}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.ActionResult] Post() on controller OpenAlprWebhookProcessor.WebhookProcessor.WebhookController (OpenAlprWebhookProcessor).\n","stream":"stdout","time":"2021-01-12T14:56:37.796078554Z"}
{"log":"[14:56:37 INF] request received from: ::ffff:35.170.81.143\n","stream":"stdout","time":"2021-01-12T14:56:37.924979241Z"}
{"log":"[14:56:37 INF] adding job for plate: EREJ02\n","stream":"stdout","time":"2021-01-12T14:56:37.925661793Z"}
{"log":"[14:56:37 INF] processing job for plate: EREJ02\n","stream":"stdout","time":"2021-01-12T14:56:37.926771Z"}
{"log":"[14:56:37 INF] Entity Framework Core 5.0.1 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-12T14:56:37.933352562Z"}
{"log":"[14:56:37 INF] Executed DbCommand (1ms) [Parameters=[@p0='?', @p1='?', @p2='?', @p3='?', @p4='?', @p5='?' (Size = 5112), @p6='?' (Size = 6), @p7='?', @p8='?', @p9='?' (Size = 64), @p10='?' (Size = 27), @p11='?', @p12='?' (Size = 29)], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:56:37.940937034Z"}
{"log":"INSERT INTO \"PlateGroups\" (\"Id\", \"AlertDescription\", \"Confidence\", \"Direction\", \"IsAlert\", \"Jpeg\", \"Number\", \"OpenAlprCameraId\", \"OpenAlprProcessingTimeMs\", \"OpenAlprUuid\", \"PlateCoordinates\", \"ReceivedOnEpoch\", \"VehicleDescription\")\n","stream":"stdout","time":"2021-01-12T14:56:37.940988158Z"}
{"log":"VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12);\n","stream":"stdout","time":"2021-01-12T14:56:37.94111869Z"}
{"log":"[14:56:37 INF] plate saved successfully\n","stream":"stdout","time":"2021-01-12T14:56:37.95461181Z"}
{"log":"[14:56:37 INF] Executing HttpStatusCodeResult, setting HTTP status code 200\n","stream":"stdout","time":"2021-01-12T14:56:37.960389787Z"}
{"log":"[14:56:37 INF] Executed action OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor) in 165.094ms\n","stream":"stdout","time":"2021-01-12T14:56:37.96157973Z"}
{"log":"[14:56:37 INF] Executed endpoint 'OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:56:37.963094851Z"}
{"log":"[14:56:37 INF] HTTP POST /webhook responded 200 in 168.9101 ms\n","stream":"stdout","time":"2021-01-12T14:56:37.964315524Z"}
{"log":"[14:56:37 INF] Request finished HTTP/1.1 POST http://<redacted>:3859/webhook application/json 20708 - 200 0 - 170.3587ms\n","stream":"stdout","time":"2021-01-12T14:56:37.965204454Z"}
{"log":"[14:56:44 INF] clearing expired overlay for: 254963574\n","stream":"stdout","time":"2021-01-12T14:56:44.257762202Z"}
{"log":"[14:57:09 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/ - -\n","stream":"stdout","time":"2021-01-12T14:57:09.070083872Z"}
{"log":"[14:57:09 INF] The file /index.html was not modified\n","stream":"stdout","time":"2021-01-12T14:57:09.071492486Z"}
{"log":"[14:57:09 INF] HTTP GET / responded 304 in 1.7420 ms\n","stream":"stdout","time":"2021-01-12T14:57:09.072328896Z"}
{"log":"[14:57:09 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/ - - - 304 - text/html 3.4457ms\n","stream":"stdout","time":"2021-01-12T14:57:09.073548731Z"}
{"log":"[14:57:09 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/runtime.3a13b20195430b549739.js - -\n","stream":"stdout","time":"2021-01-12T14:57:09.154784441Z"}
{"log":"[14:57:09 INF] The file /runtime.3a13b20195430b549739.js was not modified\n","stream":"stdout","time":"2021-01-12T14:57:09.158443456Z"}
{"log":"[14:57:09 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/main.00a9e6b48719aa3c98ee.js - -\n","stream":"stdout","time":"2021-01-12T14:57:09.159025437Z"}
{"log":"[14:57:09 INF] HTTP GET /runtime.3a13b20195430b549739.js responded 304 in 4.6206 ms\n","stream":"stdout","time":"2021-01-12T14:57:09.160004252Z"}
{"log":"[14:57:09 INF] The file /main.00a9e6b48719aa3c98ee.js was not modified\n","stream":"stdout","time":"2021-01-12T14:57:09.160391658Z"}
{"log":"[14:57:09 INF] HTTP GET /main.00a9e6b48719aa3c98ee.js responded 304 in 1.3939 ms\n","stream":"stdout","time":"2021-01-12T14:57:09.167415031Z"}
{"log":"[14:57:09 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/main.00a9e6b48719aa3c98ee.js - - - 304 - application/javascript 4.9197ms\n","stream":"stdout","time":"2021-01-12T14:57:09.167521817Z"}
{"log":"[14:57:09 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/runtime.3a13b20195430b549739.js - - - 304 - application/javascript 25.2833ms\n","stream":"stdout","time":"2021-01-12T14:57:09.180208559Z"}
{"log":"[14:57:09 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-12T14:57:09.380183297Z"}
{"log":"[14:57:09 WRN] attempted login failed\n","stream":"stdout","time":"2021-01-12T14:57:09.381653579Z"}
{"log":"[14:57:09 INF] Successfully validated the token.\n","stream":"stdout","time":"2021-01-12T14:57:09.382333896Z"}
{"log":"[14:57:09 INF] Authorization was successful.\n","stream":"stdout","time":"2021-01-12T14:57:09.383117088Z"}
{"log":"[14:57:09 INF] Executing endpoint 'OpenAlprWebhookProcessor.LicensePlates.LicensePlatesController.GetRecent (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:57:09.383422151Z"}
{"log":"[14:57:09 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-12T14:57:09.383657165Z"}
{"log":"[14:57:09 INF] Entity Framework Core 5.0.1 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-12T14:57:09.385022268Z"}
{"log":"[14:57:09 INF] Executed DbCommand (3ms) [Parameters=[@__p_1='?', @__p_0='?'], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:57:09.394409603Z"}
{"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-12T14:57:09.394453393Z"}
{"log":"FROM \"PlateGroups\" AS \"p\"\n","stream":"stdout","time":"2021-01-12T14:57:09.394469386Z"}
{"log":"ORDER BY \"p\".\"ReceivedOnEpoch\" DESC\n","stream":"stdout","time":"2021-01-12T14:57:09.394479024Z"}
{"log":"LIMIT @__p_1 OFFSET @__p_0\n","stream":"stdout","time":"2021-01-12T14:57:09.394488523Z"}
{"log":"[14:57:09 INF] Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:57:09.398506588Z"}
{"log":"SELECT COUNT(*)\n","stream":"stdout","time":"2021-01-12T14:57:09.398536061Z"}
{"log":"FROM \"PlateGroups\" AS \"p\"\n","stream":"stdout","time":"2021-01-12T14:57:09.398545699Z"}
{"log":"[14:57:09 INF] Executing ObjectResult, writing value of type 'OpenAlprWebhookProcessor.LicensePlates.GetLicensePlate.GetLicensePlateResponse'.\n","stream":"stdout","time":"2021-01-12T14:57:09.399433931Z"}
{"log":"[14:57:09 INF] Executed action OpenAlprWebhookProcessor.LicensePlates.LicensePlatesController.GetRecent (OpenAlprWebhookProcessor) in 16.7854ms\n","stream":"stdout","time":"2021-01-12T14:57:09.400769631Z"}
{"log":"[14:57:09 INF] Executed endpoint 'OpenAlprWebhookProcessor.LicensePlates.LicensePlatesController.GetRecent (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:57:09.400873065Z"}
{"log":"[14:57:09 INF] HTTP GET /licenseplates/recent?pageSize=5\u0026pageNumber=0 responded 200 in 20.5343 ms\n","stream":"stdout","time":"2021-01-12T14:57:09.40102853Z"}
{"log":"[14:57:09 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 21.4549ms\n","stream":"stdout","time":"2021-01-12T14:57:09.401701234Z"}
{"log":"[14:57:09 INF] Request starting HTTP/1.1 GET http://10.200.200.18:3859/favicon.ico - -\n","stream":"stdout","time":"2021-01-12T14:57:09.701944344Z"}
{"log":"[14:57:09 INF] Sending file. Request path: '/favicon.ico'. Physical path: '/app/wwwroot/favicon.ico'\n","stream":"stdout","time":"2021-01-12T14:57:09.701982058Z"}
{"log":"[14:57:09 INF] HTTP GET /favicon.ico responded 200 in 0.9241 ms\n","stream":"stdout","time":"2021-01-12T14:57:09.701993372Z"}
{"log":"[14:57:09 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/favicon.ico - - - 200 5430 image/x-icon 1.3851ms\n","stream":"stdout","time":"2021-01-12T14:57:09.702003568Z"}
{"log":"[14:57:11 INF] Request starting HTTP/1.1 POST http://<redacted>:3859/webhook application/json 18009\n","stream":"stdout","time":"2021-01-12T14:57:11.671150037Z"}
{"log":"[14:57:11 INF] Executing endpoint 'OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:57:11.672654402Z"}
{"log":"[14:57:11 INF] Route matched with {action = \"Post\", controller = \"Webhook\"}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.ActionResult] Post() on controller OpenAlprWebhookProcessor.WebhookProcessor.WebhookController (OpenAlprWebhookProcessor).\n","stream":"stdout","time":"2021-01-12T14:57:11.673457498Z"}
{"log":"[14:57:11 INF] request received from: ::ffff:54.221.95.194\n","stream":"stdout","time":"2021-01-12T14:57:11.810516395Z"}
{"log":"[14:57:11 INF] adding job for plate: KEFN95\n","stream":"stdout","time":"2021-01-12T14:57:11.811724566Z"}
{"log":"[14:57:11 INF] processing job for plate: KEFN95\n","stream":"stdout","time":"2021-01-12T14:57:11.812935182Z"}
{"log":"[14:57:11 INF] Entity Framework Core 5.0.1 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-12T14:57:11.815583116Z"}
{"log":"[14:57:11 INF] Executed DbCommand (2ms) [Parameters=[@p0='?', @p1='?', @p2='?', @p3='?', @p4='?', @p5='?' (Size = 4528), @p6='?' (Size = 6), @p7='?', @p8='?', @p9='?' (Size = 64), @p10='?' (Size = 27), @p11='?', @p12='?' (Size = 20)], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-12T14:57:11.843546076Z"}
{"log":"INSERT INTO \"PlateGroups\" (\"Id\", \"AlertDescription\", \"Confidence\", \"Direction\", \"IsAlert\", \"Jpeg\", \"Number\", \"OpenAlprCameraId\", \"OpenAlprProcessingTimeMs\", \"OpenAlprUuid\", \"PlateCoordinates\", \"ReceivedOnEpoch\", \"VehicleDescription\")\n","stream":"stdout","time":"2021-01-12T14:57:11.843620806Z"}
{"log":"VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12);\n","stream":"stdout","time":"2021-01-12T14:57:11.845597223Z"}
{"log":"[14:57:11 INF] plate saved successfully\n","stream":"stdout","time":"2021-01-12T14:57:11.869043597Z"}
{"log":"[14:57:11 INF] Executing HttpStatusCodeResult, setting HTTP status code 200\n","stream":"stdout","time":"2021-01-12T14:57:11.870135903Z"}
{"log":"[14:57:11 INF] Executed action OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor) in 196.6282ms\n","stream":"stdout","time":"2021-01-12T14:57:11.870545657Z"}
{"log":"[14:57:11 INF] Executed endpoint 'OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T14:57:11.870827673Z"}
{"log":"[14:57:11 INF] HTTP POST /webhook responded 200 in 199.4375 ms\n","stream":"stdout","time":"2021-01-12T14:57:11.871125054Z"}
{"log":"[14:57:11 INF] Request finished HTTP/1.1 POST http://<redacted>:3859/webhook application/json 18009 - 200 0 - 201.1120ms\n","stream":"stdout","time":"2021-01-12T14:57:11.872146053Z"}
{"log":"[14:57:17 INF] clearing expired overlay for: 254963574\n","stream":"stdout","time":"2021-01-12T14:57:17.548328154Z"}
{"log":"[14:57:26 INF] Application is shutting down...\n","stream":"stdout","time":"2021-01-12T14:57:26.820993318Z"}
 
Ya I'm having trouble finding the right set of coordinates to get the crop correctly.

In the mean time, i'm working on a "hydrator" that can scan the openalpr web server (including the cloud) and pull back every plate seen by the system:

1610479350177.png
 
  • Like
Reactions: biggen
V2.1.0-alpha
  • plate crop images are working
  • hydrator is working (click the hydrator button ONCE, watch the logs for its progress) I'm not sure if openalpr cloud has the same response object as a local instance, or how far back it will go, so try it out with low expectations. the hydration process brings back almost all the data, but it doesn't return the vehicle year, just the make/model
  • i think i've got the directional arrows working
  • config file has changed again, added a spot for the openalpr web server, and the openalpr web server api key
 
Looks great! I haven't "Hydrated" the DB yet. Arrows all look good and plate crops are there. Plate crops are missing on anything pre-2.1.0 alpha but that is fine.

Screenshot from 2021-01-12 16-12-46.png
 
  • Like
Reactions: tech101
you can always backup your two db files then run the hydration, you can put them back if something goes wrong.

also, your cropped plate images will work after the hydration too ;)
 
  • Like
Reactions: tech101
This program/app/service is getting better and better. Whats missing at this point? Search functionality? Maybe lookup plates by date?

Amazing work!
 
  • Like
Reactions: tech101
i'm planning on
  • alerts - openalpr is limited to 3 alert types or something, we can do better. i want more ways to send alerts than email and sms, like via pushover, alerting in blue iris or something
  • global search - i want to type in a plate number and get a list of every time that plate has appeared, along with "similar" matches.
  • looking up the plate against an api to get the actual make/model
  • android app - now that the api is written i can make a simple app that i can push alerts to or something
 
  • Like
Reactions: tech101 and biggen
Looking up plates with the ability to find "similar" matches would be amazing especially since plate reading isnt 100% accurate. To have it kick back results that are close to what the user types in would be impressive.

Pushover is also pretty cool. I already use that in conjunction with Home Assistant to notify me of people coming into my driveway.
 
Last edited:
i also need to get the setup guide streamlined for new users now that most of the bugs are worked out.
 
Getting a few errors in the log I noticed I wanted to show:

JSON:
{"log":"[23:54:37 WRN] attempted login failed\n","stream":"stdout","time":"2021-01-12T23:54:37.542696051Z"}
{"log":"[23:54:37 INF] Failed to validate the token.\n","stream":"stdout","time":"2021-01-12T23:54:37.544068631Z"}
{"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-12T23:54:37.544121501Z"}
{"log":"   at Microsoft.IdentityModel.Tokens.Validators.ValidateLifetime(Nullable`1 notBefore, Nullable`1 expires, SecurityToken securityToken, TokenValidationParameters validationParameters)\n","stream":"stdout","time":"2021-01-12T23:54:37.544146224Z"}
{"log":"   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateTokenPayload(JwtSecurityToken jwtToken, TokenValidationParameters validationParameters)\n","stream":"stdout","time":"2021-01-12T23:54:37.544170738Z"}
{"log":"   at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken\u0026 validatedToken)\n","stream":"stdout","time":"2021-01-12T23:54:37.544191272Z"}
{"log":"   at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()\n","stream":"stdout","time":"2021-01-12T23:54:37.544213411Z"}
{"log":"[23:54:37 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-12T23:54:37.544454222Z"}
{"log":"[23:54:37 INF] Authorization failed. These requirements were not met:\n","stream":"stdout","time":"2021-01-12T23:54:37.544615903Z"}
{"log":"DenyAnonymousAuthorizationRequirement: Requires an authenticated user.\n","stream":"stdout","time":"2021-01-12T23:54:37.544641535Z"}
{"log":"[23:54:37 INF] AuthenticationScheme: Bearer was challenged.\n","stream":"stdout","time":"2021-01-12T23:54:37.545363828Z"}
{"log":"[23:54:37 INF] HTTP GET /licenseplates/recent?pageSize=5\u0026pageNumber=0 responded 401 in 3.8118 ms\n","stream":"stdout","time":"2021-01-12T23:54:37.545664982Z"}
{"log":"[23:54:37 INF] Request finished HTTP/1.1 GET http://10.200.200.18:3859/licenseplates/recent?pageSize=5\u0026pageNumber=0 - - - 401 0 - 4.8085ms\n","stream":"stdout","time":"2021-01-12T23:54:37.546186343Z"}
{"log":"[23:54:47 INF] Request starting HTTP/1.1 POST http://10.200.200.18:3859/users/authenticate application/json 42\n","stream":"stdout","time":"2021-01-12T23:54:47.167223152Z"}

Also I hit the Hydrate button and got this:

JSON:
{"log":"[23:56:15 INF] Executed action OpenAlprWebhookProcessor.Hydrator.HydrationController.StartHydration (OpenAlprWebhookProcessor) in 0.8128ms\n","stream":"stdout","time":"2021-01-12T23:56:15.936814441Z"}
{"log":"[23:56:15 INF] Executed endpoint 'OpenAlprWebhookProcessor.Hydrator.HydrationController.StartHydration (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-12T23:56:15.937123346Z"}
{"log":"[23:56:15 INF] HTTP POST /hydration/start responded 202 in 7.3299 ms\n","stream":"stdout","time":"2021-01-12T23:56:15.937355148Z"}
{"log":"[23:56:15 INF] Request finished HTTP/1.1 POST http://10.200.200.18:3859/hydration/start application/json 2 - 202 0 - 7.9590ms\n","stream":"stdout","time":"2021-01-12T23:56:15.937757849Z"}
{"log":"[23:56:15 INF] searching for first license plate\n","stream":"stdout","time":"2021-01-12T23:56:15.953848245Z"}
{"log":"[23:56:15 INF] searching from: 2019-05-05T00:00:00 to 2019-05-06T00:00:00\n","stream":"stdout","time":"2021-01-12T23:56:15.953888334Z"}
{"log":"[23:56:16 ERR] failed to get earliest plate date\n","stream":"stdout","time":"2021-01-12T23:56:16.399099568Z"}
{"log":"System.Text.Json.JsonException: 'A' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.\n","stream":"stdout","time":"2021-01-12T23:56:16.399151459Z"}
{"log":" ---\u003e System.Text.Json.JsonReaderException: 'A' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0.\n","stream":"stdout","time":"2021-01-12T23:56:16.399163542Z"}
{"log":"   at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader\u0026 json, ExceptionResource resource, Byte nextByte, ReadOnlySpan`1 bytes)\n","stream":"stdout","time":"2021-01-12T23:56:16.399173669Z"}
{"log":"   at System.Text.Json.Utf8JsonReader.ConsumeValue(Byte marker)\n","stream":"stdout","time":"2021-01-12T23:56:16.399182957Z"}
{"log":"   at System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte first)\n","stream":"stdout","time":"2021-01-12T23:56:16.399191687Z"}
{"log":"   at System.Text.Json.Utf8JsonReader.ReadSingleSegment()\n","stream":"stdout","time":"2021-01-12T23:56:16.399200278Z"}
{"log":"   at System.Text.Json.Utf8JsonReader.Read()\n","stream":"stdout","time":"2021-01-12T23:56:16.399208729Z"}
{"log":"   at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader\u0026 reader, JsonSerializerOptions options, ReadStack\u0026 state)\n","stream":"stdout","time":"2021-01-12T23:56:16.399217249Z"}
{"log":"   --- End of inner exception stack trace ---\n","stream":"stdout","time":"2021-01-12T23:56:16.399233173Z"}
{"log":"   at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack\u0026 state, JsonReaderException ex)\n","stream":"stdout","time":"2021-01-12T23:56:16.399242811Z"}
{"log":"   at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader\u0026 reader, JsonSerializerOptions options, ReadStack\u0026 state)\n","stream":"stdout","time":"2021-01-12T23:56:16.399252798Z"}
{"log":"   at System.Text.Json.JsonSerializer.ReadCore[TValue](Utf8JsonReader\u0026 reader, Type returnType, JsonSerializerOptions options)\n","stream":"stdout","time":"2021-01-12T23:56:16.399288068Z"}
{"log":"   at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, Type returnType, JsonSerializerOptions options)\n","stream":"stdout","time":"2021-01-12T23:56:16.399299033Z"}
{"log":"   at OpenAlprWebhookProcessor.Hydrator.HydrationService.FindEarliestPlateGroupAsync(DateTimeOffset dateRangeStart, HttpClient httpClient) in /src/Hydration/HydrationService.cs:line 193\n","stream":"stdout","time":"2021-01-12T23:56:16.399308252Z"}
{"log":"[23:57:41 INF] Application is shutting down...\n","stream":"stdout","time":"2021-01-12T23:57:41.844945676Z"}
 
first error is just your browser timing out and you having to log back in. second one looks like malformed json coming from the server.. i'll need to add some logging to dump it out.
 
  • Like
Reactions: biggen
i also need to get the setup guide streamlined for new users now that most of the bugs are worked out.
You may want to even start a new thread when you're ready for more early adopters. You gone from just overlays to a full blown logging service.
 
haha ya, maybe once you aren't finding bugs with every release.

i also want the ability to filter out my neighbors from the searches.
 
  • Like
Reactions: biggen