From 3b0c061ec7b7c3d855b085a22fa9bc0d03bef431 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 20 Mar 2020 18:05:58 +0100 Subject: [PATCH] Model and some basic code for Telemetry (inactive) --- app/Models/Telemetry.php | 38 +++++++++++++++++++ app/Support/Telemetry.php | 28 ++++++++++++-- .../2020_03_13_201950_changes_for_v520.php | 25 +++++++++--- 3 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 app/Models/Telemetry.php diff --git a/app/Models/Telemetry.php b/app/Models/Telemetry.php new file mode 100644 index 0000000000..aad89e8a7e --- /dev/null +++ b/app/Models/Telemetry.php @@ -0,0 +1,38 @@ +. + */ + +namespace FireflyIII\Models; + + +use Illuminate\Database\Eloquent\Model; + +/** + * Class Telemetry + */ +class Telemetry extends Model +{ + /** @var string */ + protected $table = 'telemetry'; + + /** @var array */ + protected $fillable = ['installation_id','submitted','user_id','key','type','value']; + +} \ No newline at end of file diff --git a/app/Support/Telemetry.php b/app/Support/Telemetry.php index f4293c2d24..4a1a7bc114 100644 --- a/app/Support/Telemetry.php +++ b/app/Support/Telemetry.php @@ -21,6 +21,7 @@ namespace FireflyIII\Support; +use FireflyIII\Models\Telemetry as TelemetryModel; use Log; /** @@ -47,14 +48,14 @@ class Telemetry */ public function feature(string $flag): void { - if (false === config('firefly.send_telemetry')) { + 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)); - // no storage backend yet, do nothing. + $this->storeEntry('flag', $flag, ''); } /** @@ -70,12 +71,33 @@ class Telemetry */ public function string(string $name, string $value): void { - if (false === config('firefly.send_telemetry')) { + 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, + ] + ); } } \ No newline at end of file diff --git a/database/migrations/2020_03_13_201950_changes_for_v520.php b/database/migrations/2020_03_13_201950_changes_for_v520.php index 7fedd4f230..ef5aa00a73 100644 --- a/database/migrations/2020_03_13_201950_changes_for_v520.php +++ b/database/migrations/2020_03_13_201950_changes_for_v520.php @@ -18,6 +18,7 @@ class ChangesForV520 extends Migration public function down(): void { Schema::dropIfExists('auto_budgets'); + Schema::dropIfExists('telemetry'); } /** @@ -40,16 +41,28 @@ class ChangesForV520 extends Migration $table->decimal('amount', 22, 12); $table->string('period', 50); - //$table->string('password', 60); - //$table->string('remember_token', 100)->nullable(); - //$table->string('reset', 32)->nullable(); - //$table->tinyInteger('blocked', false, true)->default('0'); - //$table->string('blocked_code', 25)->nullable(); - $table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade'); $table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade'); } ); } + + if (!Schema::hasTable('telemetry')) { + Schema::create( + 'telemetry', + static function (Blueprint $table) { + $table->increments('id'); + $table->timestamps(); + $table->dateTime('submitted')->nullable(); + $table->integer('user_id', false, true)->nullable(); + $table->string('installation_id', 50); + $table->string('key', 50); + $table->string('type', 25); + $table->text('value'); + + $table->foreign('user_id')->references('id')->on('users')->onDelete('set null'); + } + ); + } } }