Monitoring doc render (#1)

* Monitoring doc render

* Fix indent
diff --git a/sphinx/_salt.sls b/sphinx/_salt.sls
index ae677fb..d69e411 100644
--- a/sphinx/_salt.sls
+++ b/sphinx/_salt.sls
@@ -25,7 +25,7 @@
   - require:
     - file: salt_mine_doc_dirs
   - defaults:
-    doc: {{ doc|yaml }}
+      doc: {{ doc|yaml }}
 
 /srv/static/extern/salt/source/index.rst:
   file.managed:
@@ -35,7 +35,7 @@
   - require:
     - file: salt_mine_doc_dirs
   - defaults:
-    doc_name: "{{ doc_name }}"
+      doc_name: "{{ doc_name }}"
 
 /srv/static/extern/salt/source/services/index.rst:
   file.managed:
@@ -45,7 +45,17 @@
   - require:
     - file: salt_mine_doc_dirs
   - defaults:
-    doc_name: "{{ doc_name }}"
+      doc_name: "{{ doc_name }}"
+
+/srv/static/extern/salt/source/services/monitoring.rst:
+  file.managed:
+  - source: salt://sphinx/files/salt/source/services/monitoring.rst
+  - template: jinja
+  - mode: 644
+  - require:
+    - file: salt_mine_doc_dirs
+  - defaults:
+      doc_name: "{{ doc_name }}"
 
 /srv/static/extern/salt/source/services/endpoints.rst:
   file.managed:
@@ -55,7 +65,7 @@
   - require:
     - file: salt_mine_doc_dirs
   - defaults:
-    doc_name: "{{ doc_name }}"
+      doc_name: "{{ doc_name }}"
 
 /srv/static/extern/salt/source/services/catalog.rst:
   file.managed:
@@ -65,7 +75,7 @@
   - require:
     - file: salt_mine_doc_dirs
   - defaults:
-    doc_name: "{{ doc_name }}"
+      doc_name: "{{ doc_name }}"
 
 /srv/static/extern/salt/source/nodes/index.rst:
   file.managed:
@@ -75,9 +85,12 @@
   - require:
     - file: salt_mine_doc_dirs
   - defaults:
-    doc_name: "{{ doc_name }}"
+      doc_name: "{{ doc_name }}"
 
-{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
+{%- set mine_nodes = salt['mine.get']('*', 'grains.items') %}
+{%- if mine_nodes is mapping %}
+
+{%- for node_name, node_grains in mine_nodes.iteritems() %}
 
 /srv/static/extern/salt/source/nodes/{{ node_name }}.rst:
   file.managed:
@@ -87,11 +100,13 @@
   - require:
     - file: salt_mine_doc_dirs
   - defaults:
-    node_name: {{ node_name }}
-    node_grains: {{ node_grains|yaml }}
+      node_name: {{ node_name }}
+      node_grains: {{ node_grains|yaml }}
 
 {%- endfor %}
 
+{%- endif %}
+
 generate_sphinx_doc_{{ doc_name }}:
   cmd.run:
   - name: sphinx-build -b {{ doc.builder }} /srv/static/extern/salt/source /srv/static/sites/{{ doc_name }}
diff --git a/sphinx/files/salt/source/index.rst b/sphinx/files/salt/source/index.rst
index b505b4c..7c0b984 100644
--- a/sphinx/files/salt/source/index.rst
+++ b/sphinx/files/salt/source/index.rst
@@ -1,7 +1,7 @@
 {%- set doc = salt['pillar.get']('sphinx:server:doc:'+doc_name) %}
 
 =============================================================================================
-{% if doc.title is defined %}{{ doc.title }}{% else %}Model-Driven Documentation{% endif %}
+{% if doc.title is defined %}{{ doc.title }}{% else %}SaltStack Deployment Documentation{% endif %}
 =============================================================================================
 
 {%- if doc.description is defined %}
diff --git a/sphinx/files/salt/source/nodes/index.rst b/sphinx/files/salt/source/nodes/index.rst
index 81a9252..bdb0e8f 100644
--- a/sphinx/files/salt/source/nodes/index.rst
+++ b/sphinx/files/salt/source/nodes/index.rst
@@ -1,7 +1,9 @@
+{%- set mine_nodes = salt['mine.get']('*', 'grains.items') %}
+{%- if mine_nodes is mapping %}
 
-===============================
+====================
 Infrastructure Nodes
-===============================
+====================
 
 Definition of all nodes within current infrastructure.
 
@@ -12,7 +14,7 @@
    *  - **Node FQDN**
       - **IP Addresses**
       - **Assigned Services**
-{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
+{%- for node_name, node_grains in mine_nodes.iteritems() %}
    *  - :ref:`{{ node_name }}`
 {%- if node_grains.sphinx is defined %}
       - {% for ip in node_grains.ipv4 %}
@@ -20,7 +22,7 @@
         * {{ ip }}
         {%- endif %}
         {%- endfor %}
-      - {% for service_name, service in node_grains.get('sphinx', {}).get('doc', {}).iteritems() %}{% for role_name, role in service.role.iteritems() %}{{ service_name }}-{{ role_name }} {% endfor %}{% endfor %}
+      - {% for service_name, service in node_grains.get('sphinx', {}).get('doc', {}).iteritems() %}{% if service.role is mapping %}{% for role_name, role in service.role.iteritems() %}{{ service_name }}-{{ role_name }} {% endfor %}{% endif %}{% endfor %}
 {%- else %}
       - N/A
       - N/A
@@ -30,8 +32,10 @@
 .. toctree::
    :maxdepth: 2
 
-{% for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
+{% for node_name, node_grains in mine_nodes.iteritems() %}
 {%- if node_grains.get('sphinx_doc', {}) != None %}
    {{ node_name }}
 {%- endif %}
 {% endfor %}
+
+{%- endif %}
diff --git a/sphinx/files/salt/source/nodes/node.rst b/sphinx/files/salt/source/nodes/node.rst
index 0870e97..e08358b 100644
--- a/sphinx/files/salt/source/nodes/node.rst
+++ b/sphinx/files/salt/source/nodes/node.rst
@@ -22,6 +22,7 @@
    *  - **Service Role**
       - **Parameter**
       - **Value**
+{%- if service.role is mapping %}
 {%- for role_name, role in service.role.iteritems() %}
 {%- for param_name, param in role.get('param', {}).iteritems() %}
    *  - {{ service_name }}-{{ role_name }}
@@ -30,6 +31,7 @@
 {{ render_list(param.value)|indent(8, True) }} 
 {%- endfor %}
 {%- endfor %}
+{%- endif %}
 
 {%- endfor %}
 
diff --git a/sphinx/files/salt/source/services/catalog.rst b/sphinx/files/salt/source/services/catalog.rst
index 62514e3..1424996 100644
--- a/sphinx/files/salt/source/services/catalog.rst
+++ b/sphinx/files/salt/source/services/catalog.rst
@@ -1,7 +1,7 @@
 
-===============================
+===============
 Service Catalog
-===============================
+===============
 
 All used services within configured infrastructure.
 
diff --git a/sphinx/files/salt/source/services/index.rst b/sphinx/files/salt/source/services/index.rst
index a45ba73..47435c8 100644
--- a/sphinx/files/salt/source/services/index.rst
+++ b/sphinx/files/salt/source/services/index.rst
@@ -1,12 +1,13 @@
 
-===============================
+=======================
 Infrastructure Services
-===============================
+=======================
 
-Definition of all services within current infrastructure.
+Definition of all services used within defined infrastructure.
 
 .. toctree::
    :maxdepth: 2
 
    endpoints
    catalog
+   monitoring
\ No newline at end of file
diff --git a/sphinx/files/salt/source/services/monitoring.rst b/sphinx/files/salt/source/services/monitoring.rst
new file mode 100644
index 0000000..8187e6c
--- /dev/null
+++ b/sphinx/files/salt/source/services/monitoring.rst
@@ -0,0 +1,49 @@
+
+=====================
+Monitoring Definition
+=====================
+
+Definition of monitoring metrics, logs, functional alarms.
+
+
+Log Parsing Definitions
+=======================
+
+TODO: Include heka.log_collector inputs
+
+Metric Collection Definitions
+=============================
+
+TODO: Include collectd metric defintions
+
+Functional Alarms Definitions
+=============================
+
+.. list-table::
+   :header-rows: 1
+
+   *  - **Node**
+      - **Alarm**
+      - **Trigger**
+      - **Operator**
+      - **Threshold**
+      - **Function**
+      - **Window**
+{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
+{%- if node_grains.get('heka', {}).get('metric_collector', {}).get('alarm', {}) is mapping %}
+{%- for alarm_name, alarm in node_grains.get('heka', {}).get('metric_collector', {}).get('alarm', {}).iteritems() %}
+{%- for trigger_name in alarm.triggers %}
+{%- set trigger = node_grains.get('heka', {}).get('metric_collector', {}).get('trigger', {}).get(trigger_name, {  }) %}
+{%- for rule in trigger.get('rules', []) %}
+   *  - {{ node_name }}
+      - {{ alarm_name }}
+      - {{ trigger_name }}
+      - {{ rule.relational_operator }}
+      - {{ rule.threshold }}
+      - {{ rule.function }}
+      - {{ rule.window }}
+{%- endfor %}
+{%- endfor %}
+{%- endfor %}
+{%- endif %}
+{%- endfor %}
diff --git a/sphinx/orch/generate_doc.sls b/sphinx/orch/generate_doc.sls
index 45c75f4..7bad6f1 100644
--- a/sphinx/orch/generate_doc.sls
+++ b/sphinx/orch/generate_doc.sls
@@ -1,30 +1,26 @@
+
 linux_system_doc_state:
   salt.state:
     - tgt: '*'
     - sls: linux.system.doc
 
-salt_minion_state:
+salt_minion_grains:
   salt.state:
     - tgt: '*'
-    - sls: salt.minion
+    - sls: salt.minion.grains
 
 mine_flush:
   salt.function:
-    - name: cmd.run
+    - name: mine.flush
     - tgt: '*'
-    - arg:
-      - salt-call mine.flush
 
 mine_update:
   salt.function:
-    - name: cmd.run
+    - name: mine.update
     - tgt: '*'
-    - arg:
-      - salt-call mine.update
 
 sphinx_state:
   salt.state:
-    - tgt: 'G@roles:sphinx.server'
+    - tgt: 'I@sphinx:server'
     - tgt_type: compound
     - sls: sphinx
-