source: admin/WebConsole/comandos/gestores/wakeonlan_repo.php @ b9d5756

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacion
Last change on this file since b9d5756 was 0ad92e4, checked in by Ramón M. Gómez <ramongomez@…>, 6 years ago

#892: Avoid infinite loop

  • Property mode set to 100644
File size: 2.6 KB
RevLine 
[3bf09ba]1<?php
[15acccd]2// Fichero con funciones para trabajar con el webservice
[3bf09ba]3include_once("../../includes/restfunctions.php");
[15acccd]4
5/**
6        En este punto disponemos de tres variables indicando las ips, las macs y las ids de los
7        ordenadores, este script obtiene cual es el repositorio
8        $cadenaid
9        $cadenaip
10        $cadenamac
11
12*/
13// Capturamos todas las ids
14$macs = explode(";",$cadenamac);
15// Recorremos las ids y vemos cual es la ip del repositorio
16$repos = array();
17$reposAndMacs = array();
18foreach($macs as $mac){
19        $cmd->texto="SELECT repo.ip, repo.apikey FROM ordenadores o,repositorios repo WHERE o.mac=\"".$mac."\" AND o.idrepositorio=repo.idrepositorio";
20        $rs=new Recordset;
21        $rs->Comando=&$cmd;
22    if (!$rs->Abrir())
23        return; // Error al abrir recordset
24    while (!$rs->EOF){
25                $repo = $rs->campos["ip"];
26                if(!existREPO($repo, $repos)){
27                        $repos[count($repos)]=$repo;
28                }
29                // Una vez creado el repo se asigna la mac del pc a su lista
30                if(empty($reposAndMacs[$repo])){
31                        $reposAndMacs[$repo] = array();
32                        $reposAndMacs[$repo]["apikey"] = $rs->campos["apikey"];
33                }
34                // Modificar la mac añadiendo ":" cada dos caracteres
35                $tmp = substr_replace($mac, ":", 2, 0);
36                $tmp = substr_replace($tmp, ":", 5, 0);
37                $tmp = substr_replace($tmp, ":", 8, 0);
38                $tmp = substr_replace($tmp, ":", 11, 0);
39                $tmp = substr_replace($tmp, ":", 14, 0);
40
41                $reposAndMacs[$repo][count($reposAndMacs[$repo])] = $tmp;
42            $rs->Siguiente();
43        }
44        $rs->Cerrar();
45}
[2b00219]46
47//Multicast or Unicast
48$typeWol = preg_match_all('!\d{1}!', $atributos, $matches);
49
[15acccd]50// En este punto tenemos un array con todos los repos y cada uno de ellos con una lista de todas las macs que deben arrancar
51// Recorremos cada uno de ellos
52foreach($reposAndMacs as $repo => $macs){
53        // En el array de $macs tenemos la clave "apikey"
[2b00219]54        if($macs["apikey"] !== "") {
[15acccd]55                $apiKeyRepo = $macs["apikey"];
56                unset($macs["apikey"]);
[3bf09ba]57                // Componer datos de conexión para el repositorio.
58                $urls[$repo]['url'] = "https://$repo/opengnsys/rest/repository/poweron";
59                $urls[$repo]['header'] = array('Authorization: '. $apiKeyRepo);
[2b00219]60                $urls[$repo]['post'] = '{"macs": ["' . implode('","', $macs) . '"], "ips": ["' . str_replace(';', '","', $cadenaip) .
61                        '"], "mar": "' . $matches[0][0] . '"}';
[15acccd]62        }
[2b00219]63        else {
[3bf09ba]64                $avisoRepo = true;
[15acccd]65        }
66}
[3bf09ba]67// Enviar petición múltiple a los repositorios afectados.
68if (isset($urls)) {
69        $result = multiRequest($urls);
70        // Comprobar respuesta.
71        foreach ($result as $repo => $res) {
72                if ($res['code'] != 200) {
73                        $avisoRepo = true;
74                }
75        }
76}
77
[15acccd]78
79function existREPO($repo, $repos){
80        $found=false;
81        $index = 0;
82        while(!$found && $index < count($repos)){
83                $r = $repos[$index];
[0ad92e4]84                $index++;
[15acccd]85                if($r == $repo)
86                        $found=true;
87        }
88        return $found;
89}
90
[b6ec162]91
Note: See TracBrowser for help on using the repository browser.