%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python2.7/site-packages/salt/states/
Upload File :
Create Path :
Current File : //lib/python2.7/site-packages/salt/states/grafana_dashboard.pyo

�
���^c@@s]dZddlmZmZmZddlZddlZddlZddl	m
Z
ddlmZd�Z
dZdZd	Zd
Zdddddd�Zdd
�ZdddgZgZdddgZdgZd�Zd�Zd�Zd�ZdZdZd�Zd�Z d�Z!d�Z"d�Z#d �Z$d!�Z%d"�Z&d#�Z'dS($u
Manage Grafana v2.0 Dashboards

.. versionadded:: 2016.3.0

.. code-block:: yaml

    grafana:
      grafana_timeout: 3
      grafana_token: qwertyuiop
      grafana_url: 'https://url.com'

.. code-block:: yaml

    Ensure minimum dashboard is managed:
      grafana_dashboard.present:
        - name: insightful-dashboard
        - base_dashboards_from_pillar:
          - default_dashboard
        - base_rows_from_pillar:
          - default_row
        - base_panels_from_pillar:
          - default_panel
        - dashboard:
            rows:
              - title: Usage
                panels:
                  - targets:
                      - target: alias(constantLine(50), 'max')
                    title: Imaginary
                    type: graph


The behavior of this module is to create dashboards if they do not exist, to
add rows if they do not exist in existing dashboards, and to update rows if
they exist in dashboards. The module will not manage rows that are not defined,
allowing users to manage their own custom rows.
i(tabsolute_importtprint_functiontunicode_literalsN(tsix(t
DictDiffercC@stddd�dkS(u(Only load if grafana v2.0 is configured.u
config.getugrafana_versionii(t__salt__(((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyt__virtual__4sugrafana_dashboards:defaultugrafana_panels:defaultugrafana_rows:defaultugrafana_pinned_rowsugrafanac
C@s.i|d6td6dd6id6}|p+g}|p7g}|pCg}|pOi}t|tj�rwtd|�}ntg|}tg|}tg|}t|||�}||d<|j	dg�}x0t
|�D]"\}	}
t|
||�||	<q�WxS|D]K}
|
j	d	g�}x0t
|�D]"\}	}t|||�||	<q+WqWt
|�t|�t|�d
j|�}
t|
|�}|s7tdr�d|d<dj|�|d<|St||�}|j	d
�dkrdj|�|d<dj|�|dd<n t|d<dj||�|d<|Sg|j	dg�D]}
|
j	d�^qJ}|j	dg�}xH|j	dg�D]4}|j	d�|kr�|jtj|��q�q�Wt|�t|�tt|�t|��}|j�p|j�p|j�}|r tdryd|d<td�j|t j!j"j#t$t|�t|��dd��|d<|St||�}|j	d
�dkr�t|
|�}tt|�t|��}dj|�|d<t$t|�t|��|d<n t|d<dj||�|d<|Sd|d<|S(u0
    Ensure the grafana dashboard exists and is managed.

    name
        Name of the grafana dashboard.

    base_dashboards_from_pillar
        A pillar key that contains a list of dashboards to inherit from

    base_panels_from_pillar
        A pillar key that contains a list of panels to inherit from

    base_rows_from_pillar
        A pillar key that contains a list of rows to inherit from

    dashboard
        A dict that defines a dashboard that should be managed.

    profile
        A pillar key or dict that contains grafana information
    unameuresultuucommentuchangesu
config.optionutitleurowsupanelsudb/{0}utestu#Dashboard {0} is set to be created.ustatususuccessuDashboard {0} created.unewu,Failed to create dashboard {0}, response={1}u/Dashboard {0} is set to be updated, changes={1}tindentiuDashboard {0} updated.u,Failed to update dashboard {0}, response={1}uDashboard presentN(%tTruet
isinstanceRtstring_typesRt_DEFAULT_DASHBOARD_PILLARt_DEFAULT_PANEL_PILLARt_DEFAULT_ROW_PILLARt_inherited_dashboardtgett	enumeratet_inherited_rowt_inherited_panelt_auto_adjust_panel_spanst_ensure_panel_idst_ensure_annotationstformatt_gett__opts__tNonet_updatetFalsetappendtcopytdeepcopyt_ensure_pinned_rowsRt_cleanedtchangedtaddedtremovedtstrtsalttutilstjsontdumpst_dashboard_diff(tnametbase_dashboards_from_pillartbase_panels_from_pillartbase_rows_from_pillart	dashboardtprofiletrett
new_dashboardtrowstitrowtpanelstpanelturlt
old_dashboardtresponsetmanaged_row_titlestnew_rowstold_rowtdashboard_difftupdated_neededtupdated_dashboard((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pytpresent?s�"








+



	

cC@s�i|d6td6dd6id6}t|tj�rGtd|�}ndj|�}t||�}|r�tdr�d
|d<d	j|�|d<|St	||�d
j|�|d<d
j|�|dd<|Sd|d<|S(u�
    Ensure the named grafana dashboard is absent.

    name
        Name of the grafana dashboard.

    profile
        A pillar key or dict that contains grafana information
    unameuresultuucommentuchangesu
config.optionudb/{0}utestu#Dashboard {0} is set to be deleted.uDashboard {0} deleted.unewuDashboard absentN(
RR	RR
RRRRRt_delete(R*R/R0R7texisting_dashboard((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pytabsent�s 
"



uidu
originalTitleuversionugridumodeutooltipu
textEditorc
C@stj|�}xtD]}|j|d�qWx�|jdg�D]�}xtD]}|j|d�qPWx�t|jdg��D]\}}xtD]}|j|d�q�Wx;|jdg�D]'}xt	D]}	|j|	d�q�Wq�Wt
|�|d|<q�WqCW|S(u-Return a copy without fields that can differ.urowsupanelsutargetsN(RRt_IGNORED_DASHBOARD_FIELDStpopRRt_IGNORED_ROW_FIELDSRt_IGNORED_PANEL_FIELDSt_IGNORED_TARGET_FIELDSt	_stripped(
t
_dashboardR.tignored_dashboard_fieldR4tignored_row_fieldR3R6tignored_panel_fieldttargettignored_target_field((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyR �s

%

c	C@s�g}x�|D]~}td|�}|r9|j|�q
|tkr
|jdg�dj|�}||dkr�|dj|�q�q
q
W|j|�i}t�}x4|D],}|j|jdg��|j|�q�Wt|�|d<|S(u0Return a dashboard with properties from parents.u
pillar.getuwarningsu#Cannot find dashboard pillar "{0}".utags(	RRRt
setdefaultRtsettupdateRtlist(	R.R+R0tbase_dashboardstbase_dashboard_from_pillartbase_dashboardtwarning_messagetresult_dashboardttags((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyRs&
	
	
cC@s�g}x�|D]~}td|�}|r9|j|�q
|tkr
|jdg�dj|�}||dkr�|dj|�q�q
q
W|j|�i}x|D]}|j|�q�W|S(u*Return a row with properties from parents.u
pillar.getuwarningsuCannot find row pillar "{0}".(RRR
RPRRR(R4R-R0t	base_rowstbase_row_from_pillartbase_rowRWt
result_row((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyRs 
	

cC@s�g}x�|D]~}td|�}|r9|j|�q
|tkr
|jdg�dj|�}||dkr�|dj|�q�q
q
W|j|�i}x|D]}|j|�q�W|S(u,Return a panel with properties from parents.u
pillar.getuwarningsuCannot find panel pillar "{0}".(RRRRPRRR(R6R,R0tbase_panelstbase_panel_from_pillart
base_panelRWtresult_panel((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyR2s 
	

ig@c
C@smxf|jdg�D]R}g}g}|j|�xx|jdg�D]d}td�|D��}|jdt�}||tkr�|g}|j|�qE|j|�qEWx�|D]�}g|D]}d|kr�|^q�}g|D]}d|kr�|^q�}	|	sq�ntd�|D��}
t|
}t|�t|	�}x|	D]}||d<qMWq�WqWdS(u�Adjust panel spans to take up the available width.

    For each group of panels that would be laid out on the same level, scale up
    the unspecified panel spans to fill up the level.
    urowsupanelscs@s!|]}|jdt�VqdS(uspanN(Rt_DEFAULT_PANEL_SPAN(t.0R6((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pys	<genexpr>Vsuspancs@s|]}|dVqdS(uspanN((RcR6((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pys	<genexpr>fsN(RRtsumRbt_FULL_LEVEL_SPANtfloattlen(
R.R4tlevelst
current_levelR6tcurrent_level_spantspantleveltspecified_panelstunspecified_panelstspecified_spantavailable_spant	auto_span((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyRKs.
	
	
%


cC@s�tdt�}|sdSg}x!|D]}|j|j��q'W|jdg�}g}xOt|�D]A\}}|jdd�j�|kri||=|j|�qiqiW||}dS(u%Pin rows to the top of the dashboard.u
pillar.getNurowsutitleu(Rt_PINNED_ROWS_PILLARRtlowerRR(R.tpinned_row_titlestpinned_row_titles_lowerttitleR2tpinned_rowsR3R4((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyRms
cC@sXd}xK|jdg�D]7}x.|jdg�D]}||d<|d7}q2WqWdS(u$Assign panels auto-incrementing IDs.iurowsupanelsuidN(R(R.tpanel_idR4R6((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyRs

cC@s�d|krdS|d}itd6gd6}xW|D]O}|djidd6td6dd6d	d
6dd6|d
6td6|d6�q5W|d=||d<dS(u)Explode annotation_tags into annotations.uannotation_tagsNuenableulistugraphiteu
datasourceu#C0C6BEu	iconColori
uiconSizeurgba(255, 96, 96, 0.592157)u	lineColorunameushowLineutagsuannotations(RRR(R.RYtannotationsttag((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyR�s$



cC@s�dj|jd�|�}tj|didd6dj|jd��d6d	|jd
d��}|j�}|jd�d
kr�dSd|kr�dS|dS(uGet a specific dashboard.u{0}/api/dashboards/{1}ugrafana_urltheadersuapplication/jsonuAcceptu
Bearer {0}u
grafana_tokenu
Authorizationttimeoutugrafana_timeoutiumessageu	Not foundu	dashboardN(RRtrequestsR'R(R7R/trequest_urlR9tdata((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyR�s	cC@sodj|jd�|�}tj|didd6dj|jd��d6d	|jd
��}|j�}|S(uDelete a specific dashboard.u{0}/api/dashboards/{1}ugrafana_urlR{uapplication/jsonuAcceptu
Bearer {0}u
grafana_tokenu
AuthorizationR|ugrafana_timeout(RRR}tdeleteR'(R7R/R~R9R((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyRA�s	cC@sji|d6td6}dj|jd��}tj|didj|jd��d6d	|�}|j�S(
uUpdate a specific dashboard.u	dashboardu	overwriteu{0}/api/dashboards/dbugrafana_urlR{u
Bearer {0}u
grafana_tokenu
AuthorizationR'(RRRR}tpostR'(R.R/tpayloadR~R9((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyR�s
	cC@s�i}tj|�}tj|�}t||�}tit|j��pNd	d6t|j��pgd	d6t|j��p�d	d6�|d<|j	dg�}|j	dg�}i}i}	x+|D]#}
d|
kr�|
||
d<q�q�Wx+|D]#}
d|
kr�|
|	|
d<q�q�Wt||	�}tit|j��pDd	d6t|j��p]d	d6�|d<x�|j�D]�}|	|}
||}t||
�}|dj
di�tit|j��p�d	d6t|j��p�d	d6t|j��pd	d6�|dd|<qxWi}i}xT|j	dg�D]@}
x7|
j	dg�D]#}d|krT|||d<qTqTWq;WxT|j	dg�D]@}
x7|
j	dg�D]#}d|kr�|||d<q�q�Wq�Wt||�}tit|j��pd	d6t|j��pd	d6�|d<x�|j�D]�}||}||}t||�}|dj
di�tit|j��p�d	d6t|j��p�d	d6t|j��p�d	d6�|dd|<q4W|S(
u2Return a dictionary of changes between dashboards.uchangeduaddeduremovedu	dashboardurowsutitleupanelsuidN(RRRRIRSR!RR"R#RRP(t_new_dashboardt_old_dashboardtdiffR1R8R=R;told_rowstnew_rows_by_titletold_rows_by_titleR4t	rows_difftchanged_row_titleR<tnew_rowtrow_difftold_panels_by_idtnew_panels_by_idR6tpanels_difftchanged_panel_idt	old_panelt	new_panel((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyR)�sn#

#

/#

/cC@s=i}x0tj|�D]\}}|r|||<qqW|S(uStrip falsey entries.(Rt	iteritems(tdR0tktv((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyRIs
((t__doc__t
__future__RRRRR}tsalt.utils.jsonR%tsalt.extRtsalt.utils.dictdifferRRRRR
RrRR@RCRDRFRGRHR RRRReRbRRRRRRARR)RI(((sA/usr/lib/python2.7/site-packages/salt/states/grafana_dashboard.pyt<module>'sP	}!								"								G

Zerion Mini Shell 1.0