Python中的Kairos DB POST查询

时间:2015-07-23 13:55:51

标签: python kairosdb

我试图在python中发布查询以从Kairosdb获取数据: 仪表读数是我已经创建的指标。

import urllib
import urllib2

url = 'http://localhost:8080/api/v1/datapoints/query'
values = {
    "start_absolute": "1430454600",
        "end_relative": {
"value": "5",
    "unit": "days"
        },
            "metrics": [
                        {
                        "tags": {
                        "phase": [
                                  "769"
                                  ],
                        "uom": [
                                "72"
                                ]
                        },
                        "name": "materreadings",
                        "aggregators": [
                                        {
                                        "name": "sum",
                                        "sampling": {
                                        "value": "10",
                                        "unit": "minutes"
                                        }
                                        }
                                        ]
                        }
                        ]
}

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req) // this line is giving errors
the_page = response.read()
print(the_page)

我在执行此脚本时得到以下结果:

python abc.py
Traceback (most recent call last):
  File "abc.py", line 37, in <module>
    response = urllib2.urlopen(req)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 404, in open
    response = self._open(req, data)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 422, in _open
    '_open', req)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1214, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1184, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [Errno 61] Connection refused>

当我尝试通过发送请求获得响应时,问题出现在第37行。我能够在JAVA中执行此操作但在python中我被卡住了。我错过了什么。

1 个答案:

答案 0 :(得分:1)

我没有使用Python客户端的经验(BTW那里有一个Python kairosDB库 - 我从未使用过它,但它存在于此处:https://github.com/pcn/pyKairosDB)。

但我想我知道错误: 试试url = 'http://localhost:8080/api/v1/datapoints/query/'(注意斜杠) 您在查询JSON有效负载上使用urlencode,我不需要(我不需要) urlencode用于编码特殊字符,以便在使用GET方法的URL中使用。)

BTW您的查询有点奇怪,绝对开始非常小 - 我认为您进入了Unix秒而不是毫秒 - 并且相对结束5天前...这是您的意思 - 请求来自1970年1月17日至5天前?

我可以问你有什么数据王吗?我看到你有带编号值的标签,KairosDB格式不能很好地处理可能有太多值的标签(也许它只是数据来源的ID,只要你没有&拥有成千上万或数百万的你可以。)

我希望这会有所帮助。