Update zabbix_screen.py limit screen columns (#41487)

* Update zabbix_screen.py limit screen columns

Add option graphs_in_row that allows to limit the count of columns on zabbix screen. When graphs_in_row columns is filled, begins to draw next row. If there is many hosts with many graphs each, draws all graphs for one host in an column each below each other

* fix remove whitespaces before and after brackets

Fixing ansible-test sanity --test pep8 errors
moved

* fix documentation parsing error

Fixing error: missing documentation (or could not parse documentation): expected string or buffer
This commit is contained in:
Paul 2018-06-21 14:36:18 +03:00 committed by ansibot
parent b61b113fb9
commit b21673b321

View file

@ -34,6 +34,7 @@ options:
- If the screen(s) already been added, the screen(s) name won't be updated. - If the screen(s) already been added, the screen(s) name won't be updated.
- When creating or updating screen(s), C(screen_name), C(host_group) are required. - When creating or updating screen(s), C(screen_name), C(host_group) are required.
- When deleting screen(s), the C(screen_name) is required. - When deleting screen(s), the C(screen_name) is required.
- Option C(graphs_in_row) will limit columns of screen and make multiple rows (default 3)
- > - >
The available states are: C(present) (default) and C(absent). If the screen(s) already exists, and the state is not C(absent), the screen(s) The available states are: C(present) (default) and C(absent). If the screen(s) already exists, and the state is not C(absent), the screen(s)
will just be updated as needed. will just be updated as needed.
@ -48,7 +49,7 @@ notes:
EXAMPLES = ''' EXAMPLES = '''
# Create/update a screen. # Create/update a screen.
- name: Create a new screen or update an existing screen's items - name: Create a new screen or update an existing screen's items 5 in a row
local_action: local_action:
module: zabbix_screen module: zabbix_screen
server_url: http://monitor.example.com server_url: http://monitor.example.com
@ -63,6 +64,7 @@ EXAMPLES = '''
- Example graph2 - Example graph2
graph_width: 200 graph_width: 200
graph_height: 100 graph_height: 100
graphs_in_row: 5
# Create/update multi-screen # Create/update multi-screen
- name: Create two of new screens or update the existing screens' items - name: Create two of new screens or update the existing screens' items
@ -248,20 +250,24 @@ class Screen(object):
pass pass
# get screen's hsize and vsize # get screen's hsize and vsize
def get_hsize_vsize(self, hosts, v_size): def get_hsize_vsize(self, hosts, v_size, graphs_in_row):
h_size = len(hosts) h_size = len(hosts)
# when there is only one host, put all graphs in a row
if h_size == 1: if h_size == 1:
if v_size == 1: if v_size <= graphs_in_row:
h_size = 1 h_size = v_size
elif v_size in range(2, 9):
h_size = 2
else: else:
h_size = 3 h_size = graphs_in_row
v_size = (v_size - 1) // h_size + 1 v_size = (v_size - 1) // h_size + 1
# when len(hosts) is more then graphs_in_row
elif len(hosts) > graphs_in_row:
h_size = graphs_in_row
v_size = (len(hosts) // graphs_in_row + 1) * v_size
return h_size, v_size return h_size, v_size
# create screen_items # create screen_items
def create_screen_items(self, screen_id, hosts, graph_name_list, width, height, h_size): def create_screen_items(self, screen_id, hosts, graph_name_list, width, height, h_size, graphs_in_row):
if len(hosts) < 4: if len(hosts) < 4:
if width is None or width < 0: if width is None or width < 0:
width = 500 width = 500
@ -289,7 +295,8 @@ class Screen(object):
if graph_id is not None: if graph_id is not None:
self._zapi.screenitem.create({'screenid': screen_id, 'resourcetype': 0, 'resourceid': graph_id, self._zapi.screenitem.create({'screenid': screen_id, 'resourcetype': 0, 'resourceid': graph_id,
'width': width, 'height': height, 'width': width, 'height': height,
'x': i, 'y': j, 'colspan': 1, 'rowspan': 1, 'x': i % graphs_in_row, 'y': len(graph_id_list) * (i // graphs_in_row) + j,
'colspan': 1, 'rowspan': 1,
'elements': 0, 'valign': 0, 'halign': 0, 'elements': 0, 'valign': 0, 'halign': 0,
'style': 0, 'dynamic': 0, 'sort_triggers': 0}) 'style': 0, 'dynamic': 0, 'sort_triggers': 0})
except Already_Exists: except Already_Exists:
@ -356,6 +363,9 @@ def main():
else: else:
host_group = zabbix_screen['host_group'] host_group = zabbix_screen['host_group']
graph_names = zabbix_screen['graph_names'] graph_names = zabbix_screen['graph_names']
graphs_in_row = 3
if 'graphs_in_row' in zabbix_screen:
graphs_in_row = zabbix_screen['graphs_in_row']
graph_width = None graph_width = None
if 'graph_width' in zabbix_screen: if 'graph_width' in zabbix_screen:
graph_width = zabbix_screen['graph_width'] graph_width = zabbix_screen['graph_width']
@ -369,12 +379,12 @@ def main():
resource_id_list = [] resource_id_list = []
graph_ids, v_size = screen.get_graph_ids(hosts, graph_names) graph_ids, v_size = screen.get_graph_ids(hosts, graph_names)
h_size, v_size = screen.get_hsize_vsize(hosts, v_size) h_size, v_size = screen.get_hsize_vsize(hosts, v_size, graphs_in_row)
if not screen_id: if not screen_id:
# create screen # create screen
screen_id = screen.create_screen(screen_name, h_size, v_size) screen_id = screen.create_screen(screen_name, h_size, v_size)
screen.create_screen_items(screen_id, hosts, graph_names, graph_width, graph_height, h_size) screen.create_screen_items(screen_id, hosts, graph_names, graph_width, graph_height, h_size, graphs_in_row)
created_screens.append(screen_name) created_screens.append(screen_name)
else: else:
screen_item_list = screen.get_screen_items(screen_id) screen_item_list = screen.get_screen_items(screen_id)
@ -390,7 +400,7 @@ def main():
deleted = screen.delete_screen_items(screen_id, screen_item_id_list) deleted = screen.delete_screen_items(screen_id, screen_item_id_list)
if deleted: if deleted:
screen.update_screen(screen_id, screen_name, h_size, v_size) screen.update_screen(screen_id, screen_name, h_size, v_size)
screen.create_screen_items(screen_id, hosts, graph_names, graph_width, graph_height, h_size) screen.create_screen_items(screen_id, hosts, graph_names, graph_width, graph_height, h_size, graphs_in_row)
changed_screens.append(screen_name) changed_screens.append(screen_name)
if created_screens and changed_screens: if created_screens and changed_screens: