用javascript获取arangodb的状态url。

问题描述 投票:0回答:1

我需要得到"http:/localhost:8529_adminclusterhealth。"url,可以用javascript检查arangodb集群的状态。

它是由以下js文件组成的。

// 20200611141601
// http://203.255.92.193:8529/_admin/cluster/health

{
  "Health": {
    "PRMR-3f6a6958-cef1-4326-a7c6-fb20cd921726": {
      "Timestamp": "2020-06-09T04:32:09Z",
      "SyncStatus": "SERVING",
      "Status": "GOOD",
      "Host": "39f18558358b46eca3504bd0b4ebed26",
      "Version": "3.6.3-1",
      "SyncTime": "2020-06-09T04:32:08Z",
      "Endpoint": "tcp://203.255.92.194:8530",
      "LastAckedTime": "2020-06-09T04:32:08Z",
      "Engine": "rocksdb",
      "ShortName": "DBServer0001",
      "Role": "DBServer",
      "CanBeDeleted": false
    },
    "CRDN-4063e580-4ae0-4b89-ba5a-5b4c5616cb20": {
      "Timestamp": "2020-06-09T12:03:09Z",
      "SyncStatus": "SERVING",
      "Status": "GOOD",
      "Host": "c424ee3654814288904d1f31c257e038",
      "ShortName": "Coordinator0019",
      "Engine": "rocksdb",
      "Version": "3.6.3-1",
      "SyncTime": "2020-06-09T12:03:08Z",
      "LastAckedTime": "2020-06-09T12:03:09Z",
      "Endpoint": "tcp://203.255.92.193:8529",
      "Role": "Coordinator",
      "CanBeDeleted": false

我试过了,但是没有定义,我不知道怎么做。

const url = require('url');
const address = 'http://localhost:8529/_admin/cluster/health';
const parsedData= url.parse(address, true);

console.log(parsedData.Health); 
console.log(parsedData.Status); 
console.log(parsedData.search); 

const queryData = parsedData.query; 
console.log(queryData.Health);

我不知道该怎么做,有没有一个库函数来获取"http:/localhost:8529_adminclusterhealth。"用javascript

javascript node.js arangodb
1个回答
0
投票

url.parse() 它只是解析你传递给它的URL字符串。

console.log(parsedData);

/*
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'localhost:8529',
  port: '8529',
  hostname: 'localhost',
  hash: null,
  search: null,
  query: [Object: null prototype] {},
  pathname: '/_admin/cluster/health',
  path: '/_admin/cluster/health',
  href: 'http://localhost:8529/_admin/cluster/health'
}
*/

你需要向服务器发出一个实际的请求,比如像这样。

const http = require("http");

http.get("http://localhost:8529/_admin/cluster/health", res => {
    let data = "";

    res.on("data", chunk => {
        data += chunk;
    });

    res.on("end", () => {
        try {
            const parsedData = JSON.parse(data);
            if (parsedData.error) {
                throw new Error("Server replied with error code " + parsedData.code);
            }
            console.log("Status: Node ID");
            for (node in parsedData.Health) {
                console.log(parsedData.Health[node].Status + ": " + node);
            }
        } catch(err) {
            console.log("Error: " + err.message);
        }
    });

    res.on("error", err => {
        console.log("Error: " + err.message);
    });
});

这个例子假设协调者节点在本地8529端口上运行 并且集群的身份验证被禁用。

© www.soinside.com 2019 - 2024. All rights reserved.