Skip to content
Snippets Groups Projects
Commit 7502a8a1 authored by arthur.yueh's avatar arthur.yueh
Browse files

fix string encoding problem between python2 and python3

parent 040cbcea
No related branches found
No related tags found
No related merge requests found
import sys
def print_horizontal_line(): def print_horizontal_line():
print('') print('')
print("########################################") print("########################################")
...@@ -5,6 +7,12 @@ def print_horizontal_line(): ...@@ -5,6 +7,12 @@ def print_horizontal_line():
def log_response(resp): def log_response(resp):
status_code = resp.status_code status_code = resp.status_code
print("status: {0}".format(status_code)) print("[debug] status: {0}".format(status_code))
print("body: {0}".format(resp.content.decode('utf8'))) print("[debug] body: {0}".format(resp.json()))
return resp return resp
def toPython2And3CompatibleString(someString):
if sys.version_info[0] > 2:
return someString
else:
return someString.encode('utf8')
...@@ -4,13 +4,11 @@ from commons import * ...@@ -4,13 +4,11 @@ from commons import *
def search_dashboard(): def search_dashboard():
print("search dashboard in grafana:") print("search dashboard in grafana:")
r = send_grafana_get(grafana_url + '/api/search/?type=dash-db&limit={0}'.format(search_api_limit)) return send_grafana_get(grafana_url + '/api/search/?type=dash-db&limit={0}'.format(search_api_limit))
return (r.status_code, r.content.decode('utf8'))
def get_dashboard(board_uri): def get_dashboard(board_uri):
r = send_grafana_get(grafana_url + "/api/dashboards/{0}".format(board_uri)) (status_code, content) = send_grafana_get(grafana_url + "/api/dashboards/{0}".format(board_uri))
status_code = r.status_code
content = r.content.decode('utf8')
print("query dashboard uri: {0}, status: {1}".format(board_uri, status_code)) print("query dashboard uri: {0}, status: {1}".format(board_uri, status_code))
return (status_code, content) return (status_code, content)
...@@ -19,27 +17,21 @@ def delete_dashboard(board_uri): ...@@ -19,27 +17,21 @@ def delete_dashboard(board_uri):
return int(status_code) return int(status_code)
def create_dashboard(payload): def create_dashboard(payload):
r = send_grafana_post(grafana_url + '/api/dashboards/db', payload) return send_grafana_post(grafana_url + '/api/dashboards/db', payload)
return (r.status_code, r.content.decode('utf8'))
def search_datasource(): def search_datasource():
print("search datasources in grafana:") print("search datasources in grafana:")
r = send_grafana_get(grafana_url + '/api/datasources') return send_grafana_get(grafana_url + '/api/datasources')
return (r.status_code, r.content.decode('utf8'))
def create_datasource(payload): def create_datasource(payload):
r = send_grafana_post(grafana_url + '/api/datasources', payload) return send_grafana_post(grafana_url + '/api/datasources', payload)
return (r.status_code, r.content.decode('utf8'))
def search_folders(): def search_folders():
print("search folder in grafana:") print("search folder in grafana:")
r = send_grafana_get(grafana_url + '/api/search/?type=dash-folder') return send_grafana_get(grafana_url + '/api/search/?type=dash-folder')
return (r.status_code, r.content.decode('utf8'))
def get_folder(uid): def get_folder(uid):
r = send_grafana_get(grafana_url + "/api/folders/{0}".format(uid)) (status_code, content) = send_grafana_get(grafana_url + "/api/folders/{0}".format(uid))
status_code = r.status_code
content = r.content.decode('utf8')
print("query folder:{0}, status:{1}".format(uid, status_code)) print("query folder:{0}, status:{1}".format(uid, status_code))
return (status_code, content) return (status_code, content)
...@@ -57,18 +49,16 @@ def get_folder_id_from_old_folder_url(folder_url): ...@@ -57,18 +49,16 @@ def get_folder_id_from_old_folder_url(folder_url):
return 0 return 0
def create_folder(payload): def create_folder(payload):
r = send_grafana_post(grafana_url + '/api/folders', payload) return send_grafana_post(grafana_url + '/api/folders', payload)
status_code = r.status_code
return (r.status_code, r.content.decode('utf8'))
def send_grafana_get(url): def send_grafana_get(url):
r = requests.get(url, headers=http_get_headers, verify=verifySSL) r = requests.get(url, headers=http_get_headers, verify=verifySSL)
if debug: if debug:
log_response(r) log_response(r)
return r return (r.status_code, r.json())
def send_grafana_post(url, json_payload): def send_grafana_post(url, json_payload):
r = requests.post(url, headers=http_post_headers, data=json_payload, verify=verifySSL) r = requests.post(url, headers=http_post_headers, data=json_payload, verify=verifySSL)
if debug: if debug:
log_response(r) log_response(r)
return r return (r.status_code, r.json())
import os import os
grafana_url = os.getenv('GRAFANA_URL', 'http://localhost:3000') grafana_url = os.getenv('GRAFANA_URL', 'http://localhost:3000')
token = os.getenv('GRAFANA_TOKEN', 'eyJrIjoiS1F5Q0haZ3JPMkVMQ1pkbUwwSzlJMk5yNUZ6ZDVVZW4iLCJuIjoiYWRtaW4iLCJpZCI6MX0=') token = os.getenv('GRAFANA_TOKEN', 'eyJrIjoidUhaU2ZQQndrWFN3RTVkUnVOQkRka1JoaG9KWFFObEgiLCJuIjoiYWRtaW4iLCJpZCI6MX0=')
http_get_headers = {'Authorization': 'Bearer ' + token} http_get_headers = {'Authorization': 'Bearer ' + token}
http_post_headers = {'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json'} http_post_headers = {'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json'}
search_api_limit = 100000 search_api_limit = 100000
debug = False debug = True
verifySSL = False verifySSL = False
...@@ -9,7 +9,8 @@ if [ $# -ne 1 ]; then ...@@ -9,7 +9,8 @@ if [ $# -ne 1 ]; then
fi fi
tmp_dir=$(mktemp -d --suffix=_grafana_restore) tmp_dir="/tmp/grafana_restore"
mkdir "$tmp_dir"
tar -xzf $1 -C $tmp_dir tar -xzf $1 -C $tmp_dir
if [ -d $tmp_dir/datasources ] if [ -d $tmp_dir/datasources ]
......
...@@ -16,10 +16,10 @@ def get_all_dashboards_in_grafana(): ...@@ -16,10 +16,10 @@ def get_all_dashboards_in_grafana():
status = status_and_content_of_all_dashboards[0] status = status_and_content_of_all_dashboards[0]
content = status_and_content_of_all_dashboards[1] content = status_and_content_of_all_dashboards[1]
if status == 200: if status == 200:
dashboards = json.loads(content) dashboards = content
print("There are {0} dashboards:".format(len(dashboards))) print("There are {0} dashboards:".format(len(dashboards)))
for board in dashboards: for board in dashboards:
print('name: {}'.format(board['title'])) print('name: {}'.format(toPython2And3CompatibleString(board['title'])))
return dashboards return dashboards
else: else:
print("get dashboards failed, status: {0}, msg: {1}".format(status, content)) print("get dashboards failed, status: {0}, msg: {1}".format(status, content))
...@@ -28,8 +28,9 @@ def get_all_dashboards_in_grafana(): ...@@ -28,8 +28,9 @@ def get_all_dashboards_in_grafana():
def save_dashboard_setting(dashboard_name, file_name, dashboard_settings): def save_dashboard_setting(dashboard_name, file_name, dashboard_settings):
file_path = folder_path + '/' + file_name + '.dashboard' file_path = folder_path + '/' + file_name + '.dashboard'
with open(u"{0}".format(file_path) , 'w') as f: print(dashboard_settings)
f.write(dashboard_settings.encode('utf-8')) with open(u"{0}".format(file_path), 'w') as f:
f.write(json.dumps(dashboard_settings))
print("dashboard: {0} -> saved to: {1}".format(dashboard_name, file_path)) print("dashboard: {0} -> saved to: {1}".format(dashboard_name, file_path))
...@@ -37,10 +38,14 @@ def get_indivisual_dashboard_setting_and_save(dashboards): ...@@ -37,10 +38,14 @@ def get_indivisual_dashboard_setting_and_save(dashboards):
for board in dashboards: for board in dashboards:
status_code_and_content = get_dashboard(board['uri']) status_code_and_content = get_dashboard(board['uri'])
if status_code_and_content[0] == 200: if status_code_and_content[0] == 200:
save_dashboard_setting(board['title'], board['uid'], status_code_and_content[1]) save_dashboard_setting(
toPython2And3CompatibleString(board['title']),
board['uid'],
status_code_and_content[1]
)
file_path = folder_path + '/' + log_file file_path = folder_path + '/' + log_file
with open(u"{0}".format(file_path) , 'w+') as f: with open(u"{0}".format(file_path) , 'w+') as f:
f.write('{}\t{}'.format(board['uid'], board['title'])) f.write('{}\t{}'.format(board['uid'], toPython2And3CompatibleString(board['title'])))
dashboards = get_all_dashboards_in_grafana() dashboards = get_all_dashboards_in_grafana()
print_horizontal_line() print_horizontal_line()
......
...@@ -21,7 +21,7 @@ def save_datasource(file_name, datasource_setting): ...@@ -21,7 +21,7 @@ def save_datasource(file_name, datasource_setting):
def get_all_datasources_and_save(): def get_all_datasources_and_save():
status_code_and_content = search_datasource() status_code_and_content = search_datasource()
if status_code_and_content[0] == 200: if status_code_and_content[0] == 200:
datasources = json.loads(status_code_and_content[1]) datasources = status_code_and_content[1]
print("There are {0} datasources:".format(len(datasources))) print("There are {0} datasources:".format(len(datasources)))
for datasource in datasources: for datasource in datasources:
print(datasource) print(datasource)
......
...@@ -15,10 +15,10 @@ def get_all_folders_in_grafana(): ...@@ -15,10 +15,10 @@ def get_all_folders_in_grafana():
status = status_and_content_of_all_folders[0] status = status_and_content_of_all_folders[0]
content = status_and_content_of_all_folders[1] content = status_and_content_of_all_folders[1]
if status == 200: if status == 200:
folders = json.loads(content) folders = content
print("There are {0} folders:".format(len(content))) print("There are {0} folders:".format(len(content)))
for folder in folders: for folder in folders:
print("name: {0}".format(folder['title'])) print("name: {0}".format(toPython2And3CompatibleString(folder['title'])))
return folders return folders
else: else:
print("get folders failed, status: {0}, msg: {1}".format(status, content)) print("get folders failed, status: {0}, msg: {1}".format(status, content))
...@@ -28,7 +28,7 @@ def get_all_folders_in_grafana(): ...@@ -28,7 +28,7 @@ def get_all_folders_in_grafana():
def save_folder_setting(folder_name, file_name, folder_settings): def save_folder_setting(folder_name, file_name, folder_settings):
file_path = folder_path + '/' + file_name + '.folder' file_path = folder_path + '/' + file_name + '.folder'
with open(file_path , 'w') as f: with open(file_path , 'w') as f:
f.write(folder_settings) f.write(json.dumps(folder_settings))
print("folder:{0} are saved to {1}".format(folder_name, file_path)) print("folder:{0} are saved to {1}".format(folder_name, file_path))
...@@ -36,10 +36,14 @@ def get_indivisual_folder_setting_and_save(folders): ...@@ -36,10 +36,14 @@ def get_indivisual_folder_setting_and_save(folders):
for folder in folders: for folder in folders:
status_code_and_content = get_folder(folder['uid']) status_code_and_content = get_folder(folder['uid'])
if status_code_and_content[0] == 200: if status_code_and_content[0] == 200:
save_folder_setting(folder['title'], folder['uid'], status_code_and_content[1]) save_folder_setting(
toPython2And3CompatibleString(folder['title']),
folder['uid'],
status_code_and_content[1]
)
file_path = folder_path + '/' + log_file file_path = folder_path + '/' + log_file
with open(u"{0}".format(file_path) , 'w+') as f: with open(u"{0}".format(file_path) , 'w+') as f:
f.write('{}\t{}'.format(folder['uid'], folder['title'])) f.write('{}\t{}'.format(folder['uid'], toPython2And3CompatibleString(folder['title'])))
folders = get_all_folders_in_grafana() folders = get_all_folders_in_grafana()
print_horizontal_line() print_horizontal_line()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment