Skip to content
Prev Previous commit
Next Next commit
Implement PrometheusMetricInterface in Screens models
  • Loading branch information
caleeli committed Jan 17, 2025
commit a7049b1f691bf792bb53a7cea2cd24642d9a4787
30 changes: 30 additions & 0 deletions ProcessMaker/Cache/Screens/ScreenCache.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace ProcessMaker\Cache\Screens;

use Illuminate\Support\Collection;
use ProcessMaker\Contracts\PrometheusMetricInterface;

class ScreenCache extends Collection implements PrometheusMetricInterface
{

public string $label;

public static function makeFrom(PrometheusMetricInterface $screen, $items): ScreenCache
{
$self = new static($items);
$self->label = $screen->getPrometheusMetricLabel();

return $self;
}

/**
* Returns a legible or friendly name for Prometheus metrics.
*
* @return string
*/
public function getPrometheusMetricLabel(): string
{
return $this->label;
}
}
13 changes: 12 additions & 1 deletion ProcessMaker/Models/Screen.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
use ProcessMaker\Assets\ScreensInScreen;
use ProcessMaker\Contracts\PrometheusMetricInterface;
use ProcessMaker\Contracts\ScreenInterface;
use ProcessMaker\Events\TranslationChanged;
use ProcessMaker\Traits\Exportable;
Expand Down Expand Up @@ -63,7 +64,7 @@
* @OA\Property(property="url", type="string"),
* )
*/
class Screen extends ProcessMakerModel implements ScreenInterface
class Screen extends ProcessMakerModel implements ScreenInterface, PrometheusMetricInterface
{
use SerializeToIso8601;
use HideSystemResources;
Expand Down Expand Up @@ -283,4 +284,14 @@ public function scopeFilter($query, $filterStr)

return $query;
}

/**
* Return the label to be used in grafana reports
*
* @return string
*/
public function getPrometheusMetricLabel(): string
{
return 'screen.' . $this->id;
}
}
8 changes: 7 additions & 1 deletion ProcessMaker/Models/ScreenVersion.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
namespace ProcessMaker\Models;

use Illuminate\Database\Eloquent\Builder;
use ProcessMaker\Contracts\PrometheusMetricInterface;
use ProcessMaker\Contracts\ScreenInterface;
use ProcessMaker\Events\TranslationChanged;
use ProcessMaker\Traits\HasCategories;
use ProcessMaker\Traits\HasScreenFields;

class ScreenVersion extends ProcessMakerModel implements ScreenInterface
class ScreenVersion extends ProcessMakerModel implements ScreenInterface, PrometheusMetricInterface
{
use HasCategories;
use HasScreenFields;
Expand Down Expand Up @@ -77,4 +78,9 @@ public function scopePublished(Builder $query)
{
return $query->where('draft', false);
}

public function getPrometheusMetricLabel(): string
{
return 'screen.' . $this->screen_id;
}
}
6 changes: 4 additions & 2 deletions ProcessMaker/Traits/HasScreenFields.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Illuminate\Support\Arr;
use Log;
use ProcessMaker\Cache\Screens\ScreenCache;
use ProcessMaker\Cache\Screens\ScreenCacheFactory;
use ProcessMaker\Models\Column;
use ProcessMaker\Models\Screen;
Expand Down Expand Up @@ -60,14 +61,15 @@ private function loadScreenFields()
$parsedFields = $screenCache->get($key);

if (!$parsedFields || collect($parsedFields)->isEmpty()) {
$this->parsedFields = collect([]);
$this->parsedFields = ScreenCache::makeFrom($this, []);
if ($this->config) {
$this->walkArray($this->config);
}
$this->parsedFields = ScreenCache::makeFrom($this, $this->parsedFields);

$screenCache->set($key, $this->parsedFields);
} else {
$this->parsedFields = collect($parsedFields);
$this->parsedFields = ScreenCache::makeFrom($this, $parsedFields);
}
}

Expand Down