aaronpk/Compass

Compass broke after trip

KTamas opened this issue · 3 comments

I was on a trip to another country. I'm back now and it suddenly throws 500 errors with overland. I had it running on the airplane, maybe that messed things up somehow?

[2021-10-01 06:38:44] lumen.ERROR: ErrorException: Undefined index: geometry in /opt/compass/compass/app/Http/Controllers/Api.php:280
Stack trace:
#0 /opt/compass/compass/app/Http/Controllers/Api.php(280): Laravel\Lumen\Application->Laravel\Lumen\{closure}(8, 'Undefined index...', '/opt/compass/co...', 280, Array)
#1 [internal function]: App\Http\Controllers\Api->input(Object(Illuminate\Http\Request))
#2 /opt/compass/compass/vendor/illuminate/container/Container.php(507): call_user_func_array(Array, Array)
#3 /opt/compass/compass/vendor/laravel/lumen-framework/src/Application.php(1399): Illuminate\Container\Container->call(Array, Array)
#4 /opt/compass/compass/vendor/laravel/lumen-framework/src/Application.php(1363): Laravel\Lumen\Application->callControllerCallable(Array, Array)
#5 /opt/compass/compass/vendor/laravel/lumen-framework/src/Application.php(1335): Laravel\Lumen\Application->callLumenController(Object(App\Http\Controllers\Api), 'input', Array)
#6 /opt/compass/compass/vendor/laravel/lumen-framework/src/Application.php(1303): Laravel\Lumen\Application->callControllerAction(Array)
#7 /opt/compass/compass/vendor/laravel/lumen-framework/src/Application.php(1288): Laravel\Lumen\Application->callActionOnArrayBasedRoute(Array)
#8 /opt/compass/compass/vendor/laravel/lumen-framework/src/Application.php(1207): Laravel\Lumen\Application->handleFoundRoute(Array)
#9 [internal function]: Laravel\Lumen\Application->Laravel\Lumen\{closure}(Object(Illuminate\Http\Request))
#10 /opt/compass/compass/vendor/illuminate/pipeline/Pipeline.php(139): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#11 /opt/compass/compass/vendor/illuminate/session/Middleware/StartSession.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#12 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#13 /opt/compass/compass/vendor/illuminate/pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#14 /opt/compass/compass/vendor/illuminate/cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#15 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#16 /opt/compass/compass/vendor/illuminate/pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#17 /opt/compass/compass/vendor/illuminate/cookie/Middleware/EncryptCookies.php(59): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#18 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#19 /opt/compass/compass/vendor/illuminate/pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#20 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#21 /opt/compass/compass/vendor/illuminate/pipeline/Pipeline.php(102): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#22 /opt/compass/compass/vendor/laravel/lumen-framework/src/Application.php(1439): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#23 /opt/compass/compass/vendor/laravel/lumen-framework/src/Application.php(1213): Laravel\Lumen\Application->sendThroughPipeline(Array, Object(Closure))
#24 /opt/compass/compass/vendor/laravel/lumen-framework/src/Application.php(1153): Laravel\Lumen\Application->dispatch(NULL)
#25 /opt/compass/compass/public/index.php(28): Laravel\Lumen\Application->run()
#26 {main}

So here's the entry that caused the issue:

[2021-10-01 17:44:11] lumen.DEBUG: Array
(
    [type] => Feature
    [properties] => Array
        (
            [wifi] => HomeWifi
            [timestamp] => 2021-09-30T22:42:16Z
            [battery_state] => unplugged
            [battery_level] => 0.5
            [device_id] => OLDPHONE
            [action] => application_launched_with_location
        )

)

I changed the code so it could process these:

              if (array_key_exists('geometry', $loc)) {
                if($loc['geometry']['coordinates'][0] == 0 && $loc['geometry']['coordinates'][1] == 0) $shouldAdd = false;
              } else {
                \Log::debug("something went wrong, no geometry, skipping, but srsly, wtf");
                \Log::debug(print_r($loc, true));
              }

I think what happened is that I am in the middle of switching phones and at one point both were logging and that does not jibe well with Compass somehow.

That's super weird, it shouldn't be possible for Overland to generate a record that doesn't have location data!

The other way to avoid this is to turn off the "tracking stats" feature in the app.

but yeah if you're pushing data from two phones you'll also run into the problem of the records being out of order since it currently assumes data is always written sequentially.

Yeah, I really don't know what happened, and as far as I can tell it was this one record. Since than I reset the other phone so now I have definitely only one copy of overland running.

Still, might be wise to add something like the above to the code for these freak incidents.