|
|
@@ -1,219 +0,0 @@
|
|
|
-<?php
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-// Configuración PRTG
|
|
|
-$prtgUrl = 'http://192.168.2.3';
|
|
|
-$username = 'prtgadmin';
|
|
|
-$password = 'Ittec2025!';
|
|
|
-
|
|
|
-// Configuración BD
|
|
|
-$host = 'localhost';
|
|
|
-$port = 3306;
|
|
|
-$database = 'samqa';
|
|
|
-$dbUsername = 'root';
|
|
|
-$dbPassword = 'root';
|
|
|
-
|
|
|
-// Función para hacer peticiones HTTP
|
|
|
-function makeRequest($url, $params) {
|
|
|
- $queryString = http_build_query($params);
|
|
|
- $fullUrl = $url . '?' . $queryString;
|
|
|
-
|
|
|
- echo "[REQUEST] " . date('Y-m-d H:i:s') . " - $fullUrl\n";
|
|
|
-
|
|
|
- $context = stream_context_create([
|
|
|
- 'http' => [
|
|
|
- 'timeout' => 30,
|
|
|
- 'method' => 'GET'
|
|
|
- ]
|
|
|
- ]);
|
|
|
-
|
|
|
- $response = @file_get_contents($fullUrl, false, $context);
|
|
|
-
|
|
|
- if ($response === false) {
|
|
|
- $error = error_get_last();
|
|
|
- echo "[ERROR] " . date('Y-m-d H:i:s') . " - Error: " . $error['message'] . "\n";
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- echo "[SUCCESS] " . date('Y-m-d H:i:s') . " - Respuesta recibida\n";
|
|
|
- return $response;
|
|
|
-}
|
|
|
-
|
|
|
-// Función para obtener sensores del grupo SAM
|
|
|
-function getSAMSensors($prtgUrl, $username, $password) {
|
|
|
- echo "\n=== CONSULTANDO SENSORES DEL GRUPO SAM ===\n";
|
|
|
-
|
|
|
- $params = [
|
|
|
- 'content' => 'sensors',
|
|
|
- 'output' => 'json',
|
|
|
- 'columns' => 'objid,lastvalue,parentid',
|
|
|
- 'filter_group' => 'SAM',
|
|
|
- 'username' => $username,
|
|
|
- 'password' => $password
|
|
|
- ];
|
|
|
-
|
|
|
- $response = makeRequest($prtgUrl . '/api/table.json', $params);
|
|
|
-
|
|
|
- if ($response) {
|
|
|
- echo "\n=== RESPUESTA SENSORES SAM ===\n";
|
|
|
- echo $response . "\n";
|
|
|
- echo "=== FIN RESPUESTA SENSORES ===\n\n";
|
|
|
- return $response;
|
|
|
- }
|
|
|
-
|
|
|
- return false;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-// Función para conectar a BD
|
|
|
-function connectDB($host, $port, $database, $username, $password) {
|
|
|
- try {
|
|
|
- $pdo = new PDO("mysql:host=$host;port=$port;dbname=$database;charset=utf8", $username, $password);
|
|
|
- $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
|
- echo "[DB] Conexión establecida\n";
|
|
|
- return $pdo;
|
|
|
- } catch (PDOException $e) {
|
|
|
- echo "[ERROR DB] " . $e->getMessage() . "\n";
|
|
|
- return false;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// Matriz de relación sensor -> contador (hardcodeada)
|
|
|
-$sensorCounterMap = [
|
|
|
- //2098 => 1,
|
|
|
- 2099 => 13,
|
|
|
- 2123 => 14
|
|
|
-
|
|
|
-];
|
|
|
-
|
|
|
-// Función para buscar EQUI_COEQ por parentid
|
|
|
-function getEquiCoeq($pdo, $parentid) {
|
|
|
- $stmt = $pdo->prepare("SELECT EQUI_COEQ FROM s002v01tequi WHERE JSON_CONTAINS(EQUI_OTCO, JSON_QUOTE(?))");
|
|
|
- $stmt->execute([$parentid]);
|
|
|
- $result = $stmt->fetchColumn();
|
|
|
- return $result ?: null;
|
|
|
-}
|
|
|
-
|
|
|
-// Función para buscar lista de CONA_IDCO por EQUI_COEQ
|
|
|
-function getConaIdcoList($pdo, $equipCoeq) {
|
|
|
- $stmt = $pdo->prepare("SELECT CONA_IDCO FROM S002V01TCONA WHERE CONA_COEQ = ?");
|
|
|
- $stmt->execute([$equipCoeq]);
|
|
|
- $results = $stmt->fetchAll(PDO::FETCH_COLUMN);
|
|
|
- return $results ?: [];
|
|
|
-}
|
|
|
-
|
|
|
-// Función para registrar medición
|
|
|
-function registerMeasurement($pdo, $mediCore, $lastValue) {
|
|
|
- $stmt = $pdo->prepare("
|
|
|
- INSERT INTO s002v01tmedi
|
|
|
- (MEDI_NULI, MEDI_CORE, MEDI_VALO, MEDI_WSRE, MEDI_HORE)
|
|
|
- VALUES (1, ?, ?, 1, NOW())
|
|
|
- ");
|
|
|
-
|
|
|
- return $stmt->execute([$mediCore, $lastValue]);
|
|
|
-}
|
|
|
-
|
|
|
-// Ejecutar recolección
|
|
|
-echo "=== RECOLECTOR DE MEDICIONES PRTG ===\n";
|
|
|
-echo "Fecha: " . date('Y-m-d H:i:s') . "\n";
|
|
|
-echo "Servidor PRTG: $prtgUrl\n";
|
|
|
-echo "Grupo: SAM\n";
|
|
|
-
|
|
|
-try {
|
|
|
- // Conectar BD
|
|
|
- $pdo = connectDB($host, $port, $database, $dbUsername, $dbPassword);
|
|
|
- if (!$pdo) {
|
|
|
- throw new Exception("No se pudo conectar a la base de datos");
|
|
|
- }
|
|
|
-
|
|
|
- // Consultar sensores del grupo SAM
|
|
|
- $sensorsResponse = getSAMSensors($prtgUrl, $username, $password);
|
|
|
- if (!$sensorsResponse) {
|
|
|
- throw new Exception("No se obtuvieron sensores de PRTG");
|
|
|
- }
|
|
|
-
|
|
|
- $sensors = json_decode($sensorsResponse, true);
|
|
|
- if (!$sensors || !isset($sensors['sensors'])) {
|
|
|
- throw new Exception("No se pudo decodificar respuesta de sensores");
|
|
|
- }
|
|
|
-
|
|
|
- echo "\n=== PROCESANDO SENSORES ===\n";
|
|
|
- $processed = 0;
|
|
|
- $registered = 0;
|
|
|
-
|
|
|
- foreach ($sensors['sensors'] as $sensor) {
|
|
|
- $objid = $sensor['objid'];
|
|
|
- $parentid = $sensor['parentid'];
|
|
|
- $lastValueRaw = $sensor['lastvalue_raw'] ?? '';
|
|
|
-
|
|
|
- // Validar lastvalue_raw - si está vacío, usar 0
|
|
|
- $lastValue = (empty($lastValueRaw) || trim($lastValueRaw) === '') ? 0 : $lastValueRaw;
|
|
|
-
|
|
|
- echo "[SENSOR] Procesando objid: $objid, parentid: $parentid, valor: $lastValue\n";
|
|
|
-
|
|
|
- // 1. Verificar si el sensor está en la matriz
|
|
|
- if (!isset($sensorCounterMap[$objid])) {
|
|
|
- echo "[SKIP] Sensor $objid no está en la matriz de relación\n";
|
|
|
- $processed++;
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- $expectedCounter = $sensorCounterMap[$objid];
|
|
|
- echo "[MATRIX] Sensor $objid -> Contador esperado: $expectedCounter\n";
|
|
|
-
|
|
|
- // 2. Buscar EQUI_COEQ usando parentid
|
|
|
- $equipCoeq = getEquiCoeq($pdo, $parentid);
|
|
|
- if (!$equipCoeq) {
|
|
|
- echo "[SKIP] No se encontró EQUI_COEQ para parentid: $parentid\n";
|
|
|
- $processed++;
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- echo "[FOUND] EQUI_COEQ: $equipCoeq\n";
|
|
|
-
|
|
|
- // 3. Buscar lista de CONA_IDCO
|
|
|
- $conaIdcoList = getConaIdcoList($pdo, $equipCoeq);
|
|
|
- if (empty($conaIdcoList)) {
|
|
|
- echo "[SKIP] No se encontraron contadores para EQUI_COEQ: $equipCoeq\n";
|
|
|
- $processed++;
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- echo "[FOUND] Contadores disponibles: " . implode(', ', $conaIdcoList) . "\n";
|
|
|
-
|
|
|
- // 4. Verificar si el contador esperado está en la lista
|
|
|
- if (!in_array($expectedCounter, $conaIdcoList)) {
|
|
|
- echo "[SKIP] Contador esperado $expectedCounter no está en la lista de contadores del dispositivo\n";
|
|
|
- $processed++;
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- echo "[MATCH] Contador $expectedCounter encontrado en dispositivo\n";
|
|
|
-
|
|
|
- // 5. Registrar medición
|
|
|
- if (registerMeasurement($pdo, $expectedCounter, $lastValue)) {
|
|
|
- echo "[SUCCESS] Medición registrada con contador: $expectedCounter\n";
|
|
|
- $registered++;
|
|
|
- } else {
|
|
|
- echo "[ERROR] No se pudo registrar medición\n";
|
|
|
- }
|
|
|
-
|
|
|
- $processed++;
|
|
|
- echo "\n";
|
|
|
- }
|
|
|
-
|
|
|
- echo "=== RESUMEN ===\n";
|
|
|
- echo "Sensores procesados: $processed\n";
|
|
|
- echo "Mediciones registradas: $registered\n";
|
|
|
- echo "[INFO] Recolección completada\n";
|
|
|
-
|
|
|
-} catch (Exception $e) {
|
|
|
- echo "[ERROR FATAL] " . date('Y-m-d H:i:s') . " - " . $e->getMessage() . "\n";
|
|
|
-}
|
|
|
-
|
|
|
-echo "\n=== FIN RECOLECTOR ===\n";
|
|
|
-
|
|
|
-?>
|