<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://tech.uvoo.io/index.php?action=history&amp;feed=atom&amp;title=Simple_Zabbix_Create_Screen_Script</id>
	<title>Simple Zabbix Create Screen Script - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://tech.uvoo.io/index.php?action=history&amp;feed=atom&amp;title=Simple_Zabbix_Create_Screen_Script"/>
	<link rel="alternate" type="text/html" href="https://tech.uvoo.io/index.php?title=Simple_Zabbix_Create_Screen_Script&amp;action=history"/>
	<updated>2026-04-26T01:15:30Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://tech.uvoo.io/index.php?title=Simple_Zabbix_Create_Screen_Script&amp;diff=425&amp;oldid=prev</id>
		<title>Busk at 22:39, 29 February 2020</title>
		<link rel="alternate" type="text/html" href="https://tech.uvoo.io/index.php?title=Simple_Zabbix_Create_Screen_Script&amp;diff=425&amp;oldid=prev"/>
		<updated>2020-02-29T22:39:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:39, 29 February 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https://zabbix.org/wiki/Python_script_to_create_Screen_from_all_Items/Graphs_of_a_host&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Prep &amp;lt;= Debian 10 /Ubuntu 18.04 ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Prep &amp;lt;= Debian 10 /Ubuntu 18.04 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Busk</name></author>
	</entry>
	<entry>
		<id>https://tech.uvoo.io/index.php?title=Simple_Zabbix_Create_Screen_Script&amp;diff=424&amp;oldid=prev</id>
		<title>Busk: Created page with &quot;== Prep &lt;= Debian 10 /Ubuntu 18.04 ==  &lt;pre&gt; apt install python3-requests &lt;/pre&gt;  or using virtual env  &lt;pre&gt; apt insatll python3-venv python3 -m venv venv source venv/bin/act...&quot;</title>
		<link rel="alternate" type="text/html" href="https://tech.uvoo.io/index.php?title=Simple_Zabbix_Create_Screen_Script&amp;diff=424&amp;oldid=prev"/>
		<updated>2020-02-29T22:31:22Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Prep &amp;lt;= Debian 10 /Ubuntu 18.04 ==  &amp;lt;pre&amp;gt; apt install python3-requests &amp;lt;/pre&amp;gt;  or using virtual env  &amp;lt;pre&amp;gt; apt insatll python3-venv python3 -m venv venv source venv/bin/act...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Prep &amp;lt;= Debian 10 /Ubuntu 18.04 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt install python3-requests&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or using virtual env&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt insatll python3-venv&lt;br /&gt;
python3 -m venv venv&lt;br /&gt;
source venv/bin/activate&lt;br /&gt;
pip install -U wheel pip&lt;br /&gt;
pip install requests&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example usage ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./zabbix-create-screen-from-host.py --hostname &amp;quot;myhost.example.com&amp;quot; --screenname &amp;quot;myhost.example.com-screen&amp;quot; -u myadmin -p myadminpass&lt;br /&gt;
&lt;br /&gt;
# python3 zabbix-create-screen-from-host.py -h&lt;br /&gt;
usage: zabbix-create-screen.py [-h] [--url URL] -H HOSTNAME [-u USERNAME]&lt;br /&gt;
                               [-p PASSWORD] -s SCREENNAME [-c COLUMNS] [-d]&lt;br /&gt;
                               [-t]&lt;br /&gt;
&lt;br /&gt;
Create Zabbix screen from all of a host Items or Graphs.&lt;br /&gt;
&lt;br /&gt;
optional arguments:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  --url URL             Zabbix API to create screen from&lt;br /&gt;
  -H HOSTNAME, --hostname HOSTNAME&lt;br /&gt;
                        Zabbix Host to create screen from&lt;br /&gt;
  -u USERNAME, --username USERNAME&lt;br /&gt;
                        Zabbix API user to create screen from&lt;br /&gt;
  -p PASSWORD, --password PASSWORD&lt;br /&gt;
                        Zabbix API userpass to create screen from&lt;br /&gt;
  -s SCREENNAME, --screenname SCREENNAME&lt;br /&gt;
                        Screen name in Zabbix. Put quotes around it if you&lt;br /&gt;
                        want spaces in the name.&lt;br /&gt;
  -c COLUMNS            number of columns in the screen (default: 3)&lt;br /&gt;
  -d                    enable for dynamic screen items (default: disabled)&lt;br /&gt;
  -t                    set to 1 if you want to create only simple graphs of&lt;br /&gt;
                        items, no previously defined graphs will be added to&lt;br /&gt;
                        screen (default 0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
import math&lt;br /&gt;
import requests&lt;br /&gt;
import json&lt;br /&gt;
import argparse&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def authenticate(url, username, password):&lt;br /&gt;
    payload = {'jsonrpc': '2.0',&lt;br /&gt;
              'method': 'user.login',&lt;br /&gt;
              'params': {&lt;br /&gt;
                  'user': username,&lt;br /&gt;
                  'password': password&lt;br /&gt;
              },&lt;br /&gt;
              'id': '2'&lt;br /&gt;
              }&lt;br /&gt;
&lt;br /&gt;
    headers = {'Content-Type': 'application/json-rpc'}&lt;br /&gt;
    response = requests.post(url, data = json.dumps(payload), headers = headers);&lt;br /&gt;
    data = response.json()&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        message = data['result']&lt;br /&gt;
    except:&lt;br /&gt;
        message = data['error']['data']&lt;br /&gt;
        print(message)&lt;br /&gt;
        quit()&lt;br /&gt;
&lt;br /&gt;
    return data['result']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def getGraph(hostname, url, auth, graphtype, dynamic, columns):&lt;br /&gt;
    if (graphtype == 0):&lt;br /&gt;
        selecttype = ['graphid']&lt;br /&gt;
        select = 'selectGraphs'&lt;br /&gt;
    if (graphtype == 1):&lt;br /&gt;
        selecttype = ['itemid', 'value_type']&lt;br /&gt;
        select = 'selectItems'&lt;br /&gt;
&lt;br /&gt;
    payload = {'jsonrpc': '2.0',&lt;br /&gt;
              'method': 'host.get',&lt;br /&gt;
              'params': {&lt;br /&gt;
                  select: selecttype,&lt;br /&gt;
                  'output': ['hostid', 'host'],&lt;br /&gt;
                  'searchByAny': 1,&lt;br /&gt;
                  'filter': {&lt;br /&gt;
                      'host': hostname&lt;br /&gt;
                  }&lt;br /&gt;
              },&lt;br /&gt;
              'auth': auth,&lt;br /&gt;
              'id': '2'&lt;br /&gt;
              }&lt;br /&gt;
    headers = {'Content-Type': 'application/json-rpc'}&lt;br /&gt;
    response = requests.post(url, data = json.dumps(payload), headers = headers);&lt;br /&gt;
    data = response.json()&lt;br /&gt;
    if len(data['result']) &amp;lt;= 0:&lt;br /&gt;
        # raise ValueError(&amp;quot;Host has no metric items to graph. Does host exist?&amp;quot;)&lt;br /&gt;
        sys.exit(&amp;quot;Host has no metric items to graph. Does host exist?&amp;quot;)&lt;br /&gt;
    graphs = []&lt;br /&gt;
    if (graphtype == 0):&lt;br /&gt;
        for i in data['result'][0]['graphs']:&lt;br /&gt;
            graphs.append(i['graphid'])&lt;br /&gt;
&lt;br /&gt;
    if (graphtype == 1):&lt;br /&gt;
        for i in data['result'][0]['items']:&lt;br /&gt;
            if int(i['value_type']) in (0, 3):&lt;br /&gt;
                graphs.append(i['itemid'])&lt;br /&gt;
&lt;br /&gt;
    graph_list = []&lt;br /&gt;
    x = 0&lt;br /&gt;
    y = 0&lt;br /&gt;
&lt;br /&gt;
    for graph in graphs:&lt;br /&gt;
        graph_list.append({&lt;br /&gt;
            &amp;quot;resourcetype&amp;quot;: graphtype,&lt;br /&gt;
            &amp;quot;resourceid&amp;quot;: graph,&lt;br /&gt;
            &amp;quot;width&amp;quot;: &amp;quot;500&amp;quot;,&lt;br /&gt;
            &amp;quot;height&amp;quot;: &amp;quot;100&amp;quot;,&lt;br /&gt;
            &amp;quot;x&amp;quot;: str(x),&lt;br /&gt;
            &amp;quot;y&amp;quot;: str(y),&lt;br /&gt;
            &amp;quot;colspan&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;rowspan&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;elements&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;valign&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;halign&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;style&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;url&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;dynamic&amp;quot;: str(dynamic)&lt;br /&gt;
        })&lt;br /&gt;
        x += 1&lt;br /&gt;
        if x == columns:&lt;br /&gt;
            x = 0&lt;br /&gt;
            y += 1&lt;br /&gt;
&lt;br /&gt;
    return graph_list&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def screenCreate(url, auth, screen_name, graphids, columns):&lt;br /&gt;
    if len(graphids) % columns == 0:&lt;br /&gt;
        vsize = math.ceil( len(graphids) / columns )&lt;br /&gt;
    else:&lt;br /&gt;
        vsize = math.ceil( (len(graphids) / columns) + 1 )&lt;br /&gt;
&lt;br /&gt;
    payload = {&amp;quot;jsonrpc&amp;quot;: &amp;quot;2.0&amp;quot;,&lt;br /&gt;
              &amp;quot;method&amp;quot;: &amp;quot;screen.create&amp;quot;,&lt;br /&gt;
              &amp;quot;params&amp;quot;: [{&lt;br /&gt;
                  &amp;quot;name&amp;quot;: screen_name,&lt;br /&gt;
                  &amp;quot;hsize&amp;quot;: columns,&lt;br /&gt;
                  &amp;quot;vsize&amp;quot;: vsize,&lt;br /&gt;
                  &amp;quot;screenitems&amp;quot;: []&lt;br /&gt;
              }],&lt;br /&gt;
              &amp;quot;auth&amp;quot;: auth,&lt;br /&gt;
              &amp;quot;id&amp;quot;: 2&lt;br /&gt;
              }&lt;br /&gt;
&lt;br /&gt;
    for i in graphids:&lt;br /&gt;
        payload['params'][0]['screenitems'].append(i)&lt;br /&gt;
&lt;br /&gt;
    headers = {'Content-Type': 'application/json-rpc'}&lt;br /&gt;
    response = requests.post(url, data = json.dumps(payload), headers = headers);&lt;br /&gt;
    data = response.json()&lt;br /&gt;
    # data = json.loads(response.text)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        message = data['result']&lt;br /&gt;
    except:&lt;br /&gt;
        message =data['error']['data']&lt;br /&gt;
&lt;br /&gt;
    print(json.dumps(message))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    parser = argparse.ArgumentParser(description='Create Zabbix screen from all of a host Items or Graphs.')&lt;br /&gt;
    # parser.add_argument('hostname', metavar='H', type=str,&lt;br /&gt;
    parser.add_argument('--url', required=False, type=str,&lt;br /&gt;
                        default='https://monitor.example.com/zabbix/api_jsonrpc.php',&lt;br /&gt;
                        help='Zabbix API to create screen from')&lt;br /&gt;
    parser.add_argument('-H', '--hostname', required=True, type=str,&lt;br /&gt;
                        help='Zabbix Host to create screen from')&lt;br /&gt;
    parser.add_argument('-u', '--username', required=False, type=str,&lt;br /&gt;
                        default='admin',&lt;br /&gt;
                        help='Zabbix API user to create screen from')&lt;br /&gt;
    parser.add_argument('-p', '--password', required=False, type=str,&lt;br /&gt;
                        default='admin',&lt;br /&gt;
                        help='Zabbix API userpass to create screen from')&lt;br /&gt;
    parser.add_argument('-s', '--screenname', required=True, type=str,&lt;br /&gt;
                        help='Screen name in Zabbix.  Put quotes around it if you want spaces in the name.')&lt;br /&gt;
    parser.add_argument('-c', dest='columns', type=int, default=3,&lt;br /&gt;
                        help='number of columns in the screen (default: 3)')&lt;br /&gt;
    parser.add_argument('-d', dest='dynamic', action='store_true',&lt;br /&gt;
                        help='enable for dynamic screen items (default: disabled)')&lt;br /&gt;
    parser.add_argument('-t', dest='screentype', action='store_true',&lt;br /&gt;
                        help='set to 1 if you want to create only simple graphs of items, no previously defined graphs will be added to screen (default 0)')&lt;br /&gt;
&lt;br /&gt;
    args = parser.parse_args()&lt;br /&gt;
    hostname = args.hostname&lt;br /&gt;
    screen_name = args.screenname&lt;br /&gt;
    username = args.username&lt;br /&gt;
    password = args.password&lt;br /&gt;
    url = args.url&lt;br /&gt;
    columns = args.columns&lt;br /&gt;
    dynamic = (1 if args.dynamic else 0)&lt;br /&gt;
    screentype = (1 if args.screentype else 0)&lt;br /&gt;
&lt;br /&gt;
    auth = authenticate(url, username, password)&lt;br /&gt;
    graphids = getGraph(hostname, url, auth, screentype, dynamic, columns)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;screen name: &amp;quot; + screen_name)&lt;br /&gt;
    print(&amp;quot;total graph number: &amp;quot; + str(len(graphids)))&lt;br /&gt;
&lt;br /&gt;
    screenCreate(url, auth, screen_name, graphids, columns)&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
[[Category:Python]]&lt;br /&gt;
[[Category:Scripts]]&lt;/div&gt;</summary>
		<author><name>Busk</name></author>
	</entry>
</feed>