. */ namespace FireflyIII\Support; use FireflyIII\Models\Telemetry as TelemetryModel; use Log; /** * Class Telemetry */ class Telemetry { /** * Feature telemetry stores a boolean "true" for the given $flag. * * Examples: * - use-help-pages * - has-created-bill * - do-big-import * - first-time-install * - more * * Its use should be limited to exotic and strange use cases in Firefly III. * Because time and date are logged as well, useful to track users' evolution in Firefly III. * * Any meta-data stored is strictly non-financial. * * @param string $flag */ public function feature(string $flag): void { if (false === config('firefly.send_telemetry') || false === config('firefly.feature_flags.telemetry')) { // hard stop if not allowed to do telemetry. // do nothing! return; } Log::info(sprintf('Logged telemetry feature flag "%s".', $flag)); $this->storeEntry('flag', $flag, ''); } /** * String telemetry stores a string value as a telemetry entry. Values could include: * * - "php-version", "php7.3" * - "os-version", "linux" * * Any meta-data stored is strictly non-financial. * * @param string $name * @param string $value */ public function string(string $name, string $value): void { if (false === config('firefly.send_telemetry') || false === config('firefly.feature_flags.telemetry')) { // hard stop if not allowed to do telemetry. // do nothing! return; } Log::info(sprintf('Logged telemetry string "%s" with value "%s".', $name, $value)); // no storage backend yet, do nothing. $this->storeEntry('string', $name, json_encode($value, JSON_THROW_ON_ERROR, 512)); } /** * Store new entry in DB. * * @param string $name * @param string $value */ private function storeEntry(string $type, string $name, string $value): void { TelemetryModel::create( [ 'installation_id' => \FireflyConfig::get('installation_id', '')->data, 'key' => $name, 'type' => $type, 'value' => $value, ] ); } }