DoraRPC\Monitor::discovery PHP Method

discovery() final public method

server report
final public discovery ( array $config )
$config array
    public final function discovery(array $config)
    {
        $self = $this;
        $this->_server->addProcess(new \swoole_process(function () use($config, $self) {
            swoole_set_process_name("dora: monitor service");
            static $_redisObj = array();
            while (true) {
                //for result list
                $serverListResult = array();
                //get redis config
                $redisConfig = $self->_config["redis"];
                //connect all redis
                foreach ($redisConfig as $redisItem) {
                    //validate redis ip and port
                    if (trim($redisItem["ip"]) && $redisItem["port"] > 0) {
                        $key = $redisItem["ip"] . "_" . $redisItem["port"];
                        try {
                            //connecte redis
                            if (!isset($_redisObj[$key])) {
                                //if not connect
                                $_redisObj[$key] = new \Redis();
                                $_redisObj[$key]->connect($redisItem["ip"], $redisItem["port"]);
                            }
                            //get register node server
                            $serverList = $_redisObj[$key]->smembers("dora.serverlist");
                            if ($serverList) {
                                foreach ($serverList as $sitem) {
                                    $info = json_decode($sitem, true);
                                    //decode success
                                    if ($info) {
                                        //get last report time
                                        $lastTimeKey = "dora.servertime." . $info["node"]["ip"] . "." . $info["node"]["port"] . ".time";
                                        $lastUpdatTime = $_redisObj[$key]->get($lastTimeKey);
                                        //timeout ignore
                                        if (time() - $lastUpdatTime > 20) {
                                            continue;
                                        }
                                        if (is_array($info["group"])) {
                                            foreach ($info["group"] as $groupname) {
                                                $clientkey = $info["node"]["ip"] . "_" . $info["node"]["port"];
                                                $serverListResult[$groupname][$clientkey] = array("ip" => $info["node"]["ip"], "port" => $info["node"]["port"]);
                                                $serverListResult[$groupname][$clientkey]["updatetime"] = $lastUpdatTime;
                                            }
                                        }
                                        //foreach group and record this info
                                    }
                                    //decode info if
                                }
                                // foreach
                            }
                            //if got server list from redis
                        } catch (\Exception $ex) {
                            //var_dump($ex);
                            $_redisObj[$key] = null;
                            echo "get redis server error" . PHP_EOL;
                        }
                    }
                }
                if (count($serverListResult) > 0) {
                    $configString = var_export($serverListResult, true);
                    $ret = file_put_contents($this->_config["export_path"], "<?php" . PHP_EOL . "//This is generaled by client monitor" . PHP_EOL . "return " . $configString . ";");
                    if (!$ret) {
                        echo "Error save the config to file..." . PHP_EOL;
                    } else {
                        echo "General config file to:" . $this->_config["export_path"] . PHP_EOL;
                    }
                } else {
                    echo "Error there is no Config get..." . PHP_EOL;
                }
                //sleep 10 sec
                sleep(10);
            }
        }));
    }