summaryrefslogtreecommitdiffstats
path: root/dashboard/dashboard/common/elastic_access.py
blob: e90a17fa352803877a6ff3a03a6905fc2c4f8639 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import json

import urllib3

http = urllib3.PoolManager()


def delete_request(url, creds, body=None):
    headers = urllib3.make_headers(basic_auth=creds)
    http.request('DELETE', url, headers=headers, body=body)


def publish_json(json_ojb, creds, to):
    json_dump = json.dumps(json_ojb)
    if to == 'stdout':
        print json_dump
        return 200, None
    else:
        headers = urllib3.make_headers(basic_auth=creds)
        result = http.request('POST', to, headers=headers, body=json_dump)
        return result.status, result.data


def _get_nr_of_hits(elastic_json):
    return elastic_json['hits']['total']


def get_elastic_docs(elastic_url, creds, body=None, field = '_source'):

    # 1. get the number of results
    headers = urllib3.make_headers(basic_auth=creds)
    elastic_json = json.loads(http.request('GET', elastic_url + '/_search?size=0', headers=headers, body=body).data)
    print elastic_json
    nr_of_hits = _get_nr_of_hits(elastic_json)

    # 2. get all results
    elastic_json = json.loads(http.request('GET', elastic_url + '/_search?size={}'.format(nr_of_hits), headers=headers, body=body).data)

    elastic_docs = []
    for hit in elastic_json['hits']['hits']:
        elastic_docs.append(hit[field])
    return elastic_docs


def get_elastic_docs_by_days(elastic_url, creds, days):
    if days == 0:
        body = '''{
            "query": {
                "match_all": {}
            }
        }'''
    elif days > 0:
        body = '''{{
            "query" : {{
                "range" : {{
                    "start_date" : {{
                        "gte" : "now-{}d"
                    }}
                }}
            }}
        }}'''.format(days)
    else:
        raise Exception('Update days must be non-negative')
    return get_elastic_docs(elastic_url, creds, body)