%PDF- %PDF-
Mini Shell

Mini Shell

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

�
���^c@@s?dZddlmZmZmZddlZddlZddlm	Z	ddl
mZd�ZdZ
dZd	Zd
Zddddddd�Zddd
�ZddddgZgZdddgZdgZd�Zd�Zd�Zd�ZdZdZd�Zd�Zd�Z d�Z!d �Z"d!�Z#dS("u%
Manage Grafana v4.0 Dashboards

.. versionadded:: 2017.7.0

:configuration: This state requires a configuration profile to be configured
    in the minion config, minion pillar, or master config. The module will use
    the 'grafana' key by default, if defined.

    Example configuration using basic authentication:

    .. code-block:: yaml

        grafana:
          grafana_url: http://grafana.localhost
          grafana_user: admin
          grafana_password: admin
          grafana_timeout: 3

    Example configuration using token based authentication:

    .. code-block:: yaml

        grafana:
          grafana_url: http://grafana.localhost
          grafana_token: token
          grafana_timeout: 3

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.

.. code-block:: yaml

    Ensure minimum dashboard is managed:
      grafana4_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
i(tabsolute_importtprint_functiontunicode_literalsN(tsix(t
DictDiffercC@s
dtkS(u)Only load if grafana4 module is availableugrafana4.get_dashboard(t__salt__(((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pyt__virtual__Bsugrafana_dashboards:defaultugrafana_panels:defaultugrafana_rows:defaultugrafana_pinned_rowsugrafanac
C@sJi|d6td6dd6id6}|p+i}t|tj�rStd|�}ntg|pbg}tg|pug}tg|p�g}t|||�}d|kr�||d<n|j	dg�}	x0t
|	�D]"\}
}t|||�|	|
<q�WxS|	D]K}|j	d	g�}x0t
|�D]"\}
}
t|
||�||
<q(WqWt
|�t|�t|�td
|||�}|s<tdr�d|d<dj|�|d<|Std
d|dtd|�}|j	d�dkrdj|�|d<dj|�|dd<n t|d<dj||�|d<|Sg|j	dg�D]}|j	d�^qO}|j	dg�}xH|j	dg�D]4}|j	d�|kr�|jtj|��q�q�Wt|�t|�tt|�t|��}|j�p|j�p|j�}|r<tdr~d|d<td�j|tjj j!t"t|�t|��dd��|d<|Std
d|dtd|�}|j	d�dkrtd
|||�}tt|�t|��}dj|�|d<t"t|�t|��|d<n t|d<dj||�|d<|Sd|d<|S(u�
    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.

    orgname
        Name of the organization in which the dashboard should be present.

    profile
        Configuration profile used to connect to the Grafana instance.
        Default is 'grafana'.
    unameuresultuucommentuchangesu
config.optionutitleurowsupanelsugrafana4.get_dashboardutestu#Dashboard {0} is set to be created.u grafana4.create_update_dashboardt	dashboardt	overwritetprofileustatususuccessuDashboard {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_annotationst__opts__tNonetformattFalsetappendtcopytdeepcopyt_ensure_pinned_rowsRt_cleanedtchangedtaddedtremovedtstrtsalttutilstjsontdumpst_dashboard_diff(tnametbase_dashboards_from_pillartbase_panels_from_pillartbase_rows_from_pillarRtorgnameR	trett
new_dashboardtrowstitrowtpanelstpanelt
old_dashboardtresponsetmanaged_row_titlestnew_rowstold_rowtdashboard_difftupdated_neededtupdated_dashboard((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pytpresentMs� "











+



	


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

    name
        Name of the grafana dashboard.

    orgname
        Name of the organization in which the dashboard should be present.

    profile
        Configuration profile used to connect to the Grafana instance.
        Default is 'grafana'.
    unameuresultuucommentuchangesu
config.optionugrafana4.get_dashboardutestu#Dashboard {0} is set to be deleted.ugrafana4.delete_dashboardR	uDashboard {0} deleted.unewuDashboard absentN(RRRR
RRRR(R+R/R	R0texisting_dashboard((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pytabsent�s "


uiduuidu
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
_dashboardRtignored_dashboard_fieldR4tignored_row_fieldR3R6tignored_panel_fieldttargettignored_target_field((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_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(	RR,R0tbase_dashboardstbase_dashboard_from_pillartbase_dashboardtwarning_messagetresult_dashboardttags((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_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}".(RRRRNRRP(R4R.R0t	base_rowstbase_row_from_pillartbase_rowRUt
result_row((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pyR5s 
	

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}".(RRRRNRRP(R6R-R0tbase_panelstbase_panel_from_pillart
base_panelRUtresult_panel((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pyRJs 
	

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((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pys	<genexpr>nsuspancs@s|]}|dVqdS(uspanN((RaR6((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pys	<genexpr>~sN(RRtsumR`t_FULL_LEVEL_SPANtfloattlen(
RR4tlevelst
current_levelR6tcurrent_level_spantspantleveltspecified_panelstunspecified_panelstspecified_spantavailable_spant	auto_span((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pyRcs.
	
	
%


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(Rtpinned_row_titlestpinned_row_titles_lowerttitleR2tpinned_rowsR3R4((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pyR �s
cC@sXd}xK|jdg�D]7}x.|jdg�D]}||d<|d7}q2WqWdS(u$Assign panels auto-incrementing IDs.iurowsupanelsuidN(R(Rtpanel_idR4R6((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pyR�s

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(RRWtannotationsttag((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_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(RRRRGRQR"RR#R$RRN(t_new_dashboardt_old_dashboardtdiffR1R7R<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((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pyR*�sn#

#

/#

/cC@s=i}x0tj|�D]\}}|r|||<qqW|S(uStrip falsey entries.(Rt	iteritems(tdR0tktv((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pyRG�s
($t__doc__t
__future__RRRRtsalt.utils.jsonR&tsalt.extRtsalt.utils.dictdifferRRRRRRpRR?RARBRDRERFR!RRRRcR`RR RRR*RG(((sB/usr/lib/python2.7/site-packages/salt/states/grafana4_dashboard.pyt<module>6sL	�%								"					G

Zerion Mini Shell 1.0