Lizenzbelegung durch welche User

Hallo zusammen,

wie viele Lizenzen gerade belegt sind und wo durch, sieht man ja bereits in der “Lizenzübersicht”.

Wir würden aber gerne wissen, WER gerade eine Lizenz belegt. Diese Information muss ja
eigentlich irgendwo vorliegen. Wie können wir diese Info abfragen bzw. wo müssen wir nachschauen?

Gruss & Danke für die Unterstützung.

1 Like

Hallo,

das würde mich auch interessieren.
Ich hatte das schonmal beim Support angefragt und da kam die Rückmeldung das es keine Möglichkeit gibt diese Informationen aus zu lesen, nicht mal pascom selbst kann das …

Die Informationen müssen ja eigentlich vorhanden und abrufbar sein.

Gruß
Tobias

Na ja, nicht zwingend. Für Pascom reicht es, einfach nur einen Zähler zu erhöhen oder zu erniedrigen, sobald ein Client sich an- oder abmeldet. Wer das dann ist, spielt dafür ja keine Rolle. Und die Lizenzverwaltung prüft halt nur auf diesen Zähler.

Da ein Benutzer mehrfach angemeldet sein darf aber trotzdem nur 1 Lizenz belegt kann das mit dem Zähler nicht sein.
1 Benutzer kann ja pascom Client, pascom Client rdp, mobile Client, Tischtelefon … haben aber trotzdem nur 1 Lizenz belegen.
Es muss also hinterlegt sein das Benutzer A mit pascom Client angemeldet ist, also 1 Lizenz belegt, und wenn er sich dann mit dem mobile Client anmeldet nicht nochmal 1 Lizenz belegt wird.

1 Like

Dieselbe Sache beschäftigt mich auch gerade. Einige von unseren Leuten haben kein Softphone, haben sich aber den Client installieren lassen, weil sie manchmal ins Telefonbuch schauen oder darüber anrufen möchten. Und dann lassen sie den Client laufen und verbrauchen eine Lizenz. So haben wir heute Morgen das Limit erreicht und wir mussten herumfragen, wer aktiv einen Client laufen hat. Das ist nicht besonderes professionell.
Eine genaue Auflistung der Lizenznutzung sollte bei diesem Lizenzmodell (concurrent) eine Selbstverständlichkeit sein.

Viele Grüße
Thomas Friedrich

Ich grabe den Thread hier mal aus und stimme zu.
Die Info wer gerade eine Lizenz belegt sollte irgendwo sichtbar sein.

2 Likes

Das sehe ich auch so, es ist ziemlich wichtig zu Wissen, wer welche Lizenz “verbraucht”.
Leider sehen & wissen das unsere Kunde oft selbst nicht, sodass man als Admin relativ schnell Abhilfe schaffen könnte, wenn man eine Auflistung aller User hat, welche eine Lizenz belegen.

Da bin ich bei euch: eine Übersicht welche User eine Lizenz verbraucht wäre schön!

Hi,

eine Übersicht fände ich hier auch ganz praktisch, da auch bei uns im Support Fragen hierzu natürlich eingehen. Aber auch wenn es nicht “die Übersicht” gibt, kommt man da schon ran:

  • gepairte Mobiltelefone sind ja relativ einfach über die Endgeräteliste ermittelbar
  • Clientanmeldung ist schon etwas schwieriger, ein Benutzer der via xmpp.group alle anderen Benutzer sehen kann, sieht über den Status der User (grün/gelb/graue Monitor/Handysymbole) bei wem hier eine Anmeldung vorliegt, sollten die Client User alle das Softphone nutzen, kann man auch hier über die Endgeräteliste die Anmeldungen in Erfahrung bringen.
  • abgehende Calls könnte man dann noch über die Liveansicht im Grafana/Analytics in Erfahrung bringen

Ich weiß das ersetzt nicht die hier angefragte Übersicht und ist gerade bei größeren Userzahlen sehr umständlich. Ich wollte euch hier nur einen Weg der dies zumindest “machbar macht” aufzeigen.

Grüße,
Steve

Das geht per REST API. Alle mobilen Geräte und alle aktiven Desktop-Clients zählen. Der jeweilige Benutzer lässt sich durch den Namen des Telefons auslesen.

Anbei ein einfaches PHP 8 Skript ohne externe Abhängigkeiten, welches alle aktiven Lizenzen abruft. Enthalten keine Fehlerbehandlung bei falschem Auth-Token oder unerwartetem Response vom API-Server. Auch keine formatierte Ausgabe, sondern ein einfaches var_dump.

Weitere Fallstricke: Wenn mehrere Benutzer den exakt gleichen Vor- und Nachnamen haben. Hier fehlt in der API die Angabe des Benutzernamens (damit direkt ein Feature-Request). Den könnte man aber über eine weitere Abfrage holen oder mit dem Hash arbeiten, den die device-state API ausgibt. Man müsste dann eben nur den Status für alle Geräte abfragen und nicht nur die Desktop Clients.

Meine OOP pascom Bibliothek berücksichtigt den Fall, dass es mehrere Benutzer mit dem gleichen Namen gibt. Ich werde vermutlich im Q4 2022 ein Repository in GitHub veröffentlichen. Die Bibliothek kann dann per composer installiert werden.

<?php

// Pascom cloud config
$instanceName = ''; // Your instance name "instance-name"
$authToken = ''; // Your auth token "Basic xyz="

// Pascom cloud rest API base URL
$baseUrl = 'https://pascom.cloud/' . $instanceName . '/services';

// Function to request data as json from pascom API
function pascom_request_data(string $requestUrl, string $authToken): array
{
    $requestHeaders = [
        'Authorization:' . $authToken,
        'Accept: application/json',
        'Content-Type: application/json',
        'Cache-Control: no-cache',
        'User-Agent: Pascom-Rest-Client',
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $requestUrl);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);

    $response = curl_exec($ch);
    curl_close($ch);

    if (! $response) {
        throw new ErrorException('Could not fetch device list from API.');
    }

    return json_decode($response, true);
}

// Function to extract username from device
function pascom_extract_username(string $deviceName): string
{
    $matches = [];
    preg_match('/\[(.*)\]/u', $deviceName, $matches);
    $userName = $matches[1] ?? null;

    if (! $userName) {
        throw new ErrorException('Could not find the user\'s name.');
    }

    return $userName;
}

// Request and parse device API data
$requestUrl = $baseUrl . '/device';
$responseData = pascom_request_data($requestUrl, $authToken);
$activeLicenses = [];
$desktopDeviceNames = [];

foreach ($responseData as $deviceItem) {
    $deviceName = $deviceItem['010dev_bez'];

    if (str_starts_with($deviceName, 'mobile')) {
        $userName = pascom_extract_username($deviceName);
        $activeLicenses[] = $userName;
    } elseif (str_starts_with($deviceName, 'pascom Softphone')) {
        $desktopDeviceNames[] = $deviceName;
    }
}

// Parse device status API, if desktop devices exist
if (! empty($desktopDeviceNames)) {
    $deviceNameQuery = rawurlencode(implode(',', $desktopDeviceNames));
    $requestUrl = $baseUrl . '/ipdevice/states?keys=' . $deviceNameQuery;
    $responseData = pascom_request_data($requestUrl, $authToken);

    foreach ($responseData as $deviceStatusItem) {
        $state = strtolower($deviceStatusItem['state']);
        $ipAddress = strtolower($deviceStatusItem['ip_address']);
        $deviceName = $deviceStatusItem['010dev_bez'];

        if ($state === 'unavailable' || $ipAddress === '') {
            continue;
        }

        $userName = pascom_extract_username($deviceName);

        if (! in_array($userName, $activeLicenses)) {
            $activeLicenses[] = $userName;
        }
    }
}

// Echo the list of all active licenses
var_dump($activeLicenses);

2 Likes