Explorar o código

Merge pull request #1 from t2tre/DEV_001

Dev 001
Ray Edah %!s(int64=7) %!d(string=hai) anos
pai
achega
8885a869c3

+ 33 - 0
Jenkinsfile

@@ -0,0 +1,33 @@
+pipeline {
+    agent { label 'smartos' }
+    environment {
+        PATH = '/opt/local/java/openjdk8/bin:/opt/local/bin:/opt/local/sbin:/ec/bin:/ec/sbin:/usr/bin:/usr/sbin:/usr/ccs/bin'
+    }
+
+    stages {
+        stage('Build') {
+            steps {
+                sh "echo Starting build ${env.BUILD_ID}"
+                sh '/usr/bin/bash buildscripts/show_vars.sh'
+                sh '/usr/bin/bash buildscripts/clean.sh'
+                sh '/usr/bin/bash buildscripts/build_sensu.sh'
+                sh '/usr/bin/bash buildscripts/build_prometheus_exporters.sh'
+                sh '/usr/bin/bash buildscripts/package_artefact.sh'
+            }
+        }
+        stage('Test') {
+            steps {
+                sh "echo Checking TAR artefact for build ${env.BUILD_ID}"
+                sh '/usr/bin/bash buildscripts/test_artefact.sh'
+            }
+        }
+        stage('Deploy') {
+            steps {
+                sh "echo Adding build ${env.BUILD_ID} to artifactory"
+                withCredentials([string(credentialsId: 'JENKINS_ARTIFACTORY_API_KEY', variable: 'APIKEY')]) {
+                    sh '/usr/bin/bash buildscripts/deploy_artefact.sh'
+                }
+            }
+        }
+    }
+}

+ 15 - 0
app/Gemfile

@@ -0,0 +1,15 @@
+source 'https://rubygems.org'
+gem 'sensu', '~> 1.2', '>= 1.2.1'
+gem 'sensu-plugins-disk-checks', '~> 2.5', '>= 2.5.1'
+gem 'sensu-plugins-process-checks', '~> 2.7'
+gem 'sensu-plugins-vmstats', '~> 1.0'
+gem 'sensu-plugins-load-checks', '~> 4.0'
+gem 'sensu-plugins-http', '~> 2.6'
+gem 'sensu-plugins-ssl', '~> 1.5'
+gem 'sensu-plugins-filesystem-checks', '~> 1.0'
+gem 'sensu-plugins-uchiwa', '~> 1.0'
+gem 'sensu-plugins-network-checks', '~> 2.3'
+gem 'sensu-plugins-mysql', '~> 2.2', '>= 2.2.1'
+gem 'sensu-plugins-redis', '~> 2.3', '>= 2.3.2'
+gem 'sensu-plugins-io-checks', '~> 1.0', '>= 1.0.1'
+gem 'sensu-plugins-apache', '~> 2.0'

+ 190 - 0
app/Gemfile.lock

@@ -0,0 +1,190 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (4.2.10)
+      i18n (~> 0.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.3, >= 0.3.4)
+      tzinfo (~> 1.1)
+    amq-protocol (2.0.1)
+    amqp (1.6.0)
+      amq-protocol (>= 2.0.1)
+      eventmachine
+    aws-sdk (2.10.130)
+      aws-sdk-resources (= 2.10.130)
+    aws-sdk-core (2.10.130)
+      aws-sigv4 (~> 1.0)
+      jmespath (~> 1.0)
+    aws-sdk-resources (2.10.130)
+      aws-sdk-core (= 2.10.130)
+    aws-sigv4 (1.0.2)
+    childprocess (0.5.8)
+      ffi (~> 1.0, >= 1.0.11)
+    concurrent-ruby (1.0.5)
+    dnsbl-client (1.0.2)
+    domain_name (0.5.20170404)
+      unf (>= 0.0.5, < 1.0.0)
+    em-http-server (0.1.8)
+      eventmachine
+    em-worker (0.0.2)
+      eventmachine
+    english (0.6.3)
+      language
+    eventmachine (1.2.5)
+    ffi (1.9.21)
+    http-cookie (1.0.3)
+      domain_name (~> 0.5)
+    i18n (0.9.4)
+      concurrent-ruby (~> 1.0)
+    inifile (3.0.0)
+    jmespath (1.3.1)
+    json (1.8.6)
+    language (0.6.0)
+    mime-types (3.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2016.0521)
+    minitest (5.11.3)
+    mixlib-cli (1.7.0)
+    net-ping (1.7.8)
+    netrc (0.11.0)
+    oj (2.18.1)
+    parse-cron (0.1.4)
+    redis (3.3.5)
+    rest-client (2.0.2)
+      http-cookie (>= 1.0.2, < 2.0)
+      mime-types (>= 1.16, < 4.0)
+      netrc (~> 0.8)
+    ruby-mysql (2.9.14)
+    sensu (1.2.1)
+      em-http-server (= 0.1.8)
+      eventmachine (= 1.2.5)
+      parse-cron (= 0.1.4)
+      sensu-extension (= 1.5.1)
+      sensu-extensions (= 1.9.0)
+      sensu-json (= 2.1.0)
+      sensu-logger (= 1.2.1)
+      sensu-redis (= 2.2.0)
+      sensu-settings (= 10.12.0)
+      sensu-spawn (= 2.2.1)
+      sensu-transport (= 7.0.2)
+    sensu-extension (1.5.1)
+      eventmachine
+    sensu-extensions (1.9.0)
+      sensu-extension
+      sensu-extensions-check-dependencies (= 1.0.1)
+      sensu-extensions-debug (= 1.0.0)
+      sensu-extensions-json (= 1.0.0)
+      sensu-extensions-occurrences (= 1.2.0)
+      sensu-extensions-only-check-output (= 1.0.0)
+      sensu-extensions-ruby-hash (= 1.0.0)
+      sensu-json (>= 1.1.0)
+      sensu-logger
+      sensu-settings
+    sensu-extensions-check-dependencies (1.0.1)
+      sensu-extension
+    sensu-extensions-debug (1.0.0)
+      sensu-extension
+    sensu-extensions-json (1.0.0)
+      sensu-extension
+    sensu-extensions-occurrences (1.2.0)
+      sensu-extension
+    sensu-extensions-only-check-output (1.0.0)
+      sensu-extension
+    sensu-extensions-ruby-hash (1.0.0)
+      sensu-extension
+    sensu-json (2.1.0)
+      oj (= 2.18.1)
+    sensu-logger (1.2.1)
+      eventmachine
+      sensu-json
+    sensu-plugin (1.4.5)
+      json (< 2.0.0)
+      mixlib-cli (>= 1.5.0)
+    sensu-plugins-apache (2.0.0)
+      sensu-plugin (~> 1.2)
+    sensu-plugins-disk-checks (2.5.1)
+      sensu-plugin (~> 1.2)
+      sys-filesystem (= 1.1.7)
+    sensu-plugins-filesystem-checks (1.0.0)
+      sensu-plugin (~> 1.2)
+    sensu-plugins-http (2.6.0)
+      aws-sdk (~> 2.3)
+      rest-client (~> 2.0.2)
+      sensu-plugin (~> 1.2)
+    sensu-plugins-io-checks (1.0.1)
+      sensu-plugin (~> 1.2)
+    sensu-plugins-load-checks (4.0.0)
+      sensu-plugin (~> 1.2)
+    sensu-plugins-mysql (2.2.1)
+      inifile (= 3.0.0)
+      ruby-mysql (~> 2.9)
+      sensu-plugin (~> 1.2)
+    sensu-plugins-network-checks (2.3.0)
+      activesupport (~> 4.2)
+      dnsbl-client (= 1.0.2)
+      net-ping (= 1.7.8)
+      sensu-plugin (~> 1.2)
+      whois (>= 4.0)
+      whois-parser (= 1.0.0)
+    sensu-plugins-process-checks (2.7.0)
+      english (= 0.6.3)
+      sensu-plugin (~> 1.2)
+      sys-proctable (~> 0.9.8)
+    sensu-plugins-redis (2.3.2)
+      redis (~> 3.3)
+      sensu-plugin (~> 1.2)
+    sensu-plugins-ssl (1.5.0)
+      sensu-plugin (~> 1.2)
+    sensu-plugins-uchiwa (1.0.0)
+      sensu-plugin (~> 1.2)
+    sensu-plugins-vmstats (1.0.0)
+      sensu-plugin (~> 1.2)
+    sensu-redis (2.2.0)
+      eventmachine
+    sensu-settings (10.12.0)
+      parse-cron
+      sensu-json (>= 1.1.0)
+    sensu-spawn (2.2.1)
+      childprocess (= 0.5.8)
+      em-worker (= 0.0.2)
+      eventmachine
+    sensu-transport (7.0.2)
+      amq-protocol (= 2.0.1)
+      amqp (= 1.6.0)
+      eventmachine
+      sensu-redis (>= 1.0.0)
+    sys-filesystem (1.1.7)
+      ffi
+    sys-proctable (0.9.9-universal-aix-5)
+    thread_safe (0.3.6)
+    tzinfo (1.2.5)
+      thread_safe (~> 0.1)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.5)
+    whois (4.0.5)
+    whois-parser (1.0.0)
+      activesupport (>= 4)
+      whois (>= 4.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  sensu (~> 1.2, >= 1.2.1)
+  sensu-plugins-apache (~> 2.0)
+  sensu-plugins-disk-checks (~> 2.5, >= 2.5.1)
+  sensu-plugins-filesystem-checks (~> 1.0)
+  sensu-plugins-http (~> 2.6)
+  sensu-plugins-io-checks (~> 1.0, >= 1.0.1)
+  sensu-plugins-load-checks (~> 4.0)
+  sensu-plugins-mysql (~> 2.2, >= 2.2.1)
+  sensu-plugins-network-checks (~> 2.3)
+  sensu-plugins-process-checks (~> 2.7)
+  sensu-plugins-redis (~> 2.3, >= 2.3.2)
+  sensu-plugins-ssl (~> 1.5)
+  sensu-plugins-uchiwa (~> 1.0)
+  sensu-plugins-vmstats (~> 1.0)
+
+BUNDLED WITH
+   1.16.1

+ 8 - 0
app/init/delete_service.sh

@@ -0,0 +1,8 @@
+#!/usr/bin/bash
+
+# Delete sensu service
+
+/usr/sbin/svcadm disable svc:/site/sensu-client:default
+/usr/sbin/svccfg delete svc:/site/sensu-client:default
+/bin/rm -f /var/svc/manifest/site/sensu-client.xml
+

+ 18 - 0
app/init/install_service.sh

@@ -0,0 +1,18 @@
+#!/usr/bin/bash
+
+# Install a service for Sensu
+
+SENSU_HOME_FOLDER=`/usr/bin/su - sensu -c "/bin/bash -c \"export\"" | egrep "declare -x HOME" | cut -f 2 -d = | sed -e 's/\"//g'`
+ESC_SENSU_HOME_STR=`echo ${SENSU_HOME_FOLDER} | /usr/bin/sed -e 's/\//\\\\\//g'`
+
+/usr/bin/cat ${SENSU_HOME_FOLDER}/app/init/sensu_client_template.xml > /var/svc/manifest/site/sensu-client.xml
+/usr/bin/chmod 0644 /var/svc/manifest/site/sensu-client.xml
+/usr/sbin/svccfg validate /var/svc/manifest/site/sensu-client.xml
+if [ ${?} -eq 0 ]; then
+   /usr/sbin/svccfg import /var/svc/manifest/site/sensu-client.xml
+   /usr/sbin/svcadm restart manifest-import
+else
+   exit_code=${?}
+   echo "Failed to import service manifest (exit code=${exit_code})"
+   exit ${exit_code}
+fi

+ 39 - 0
app/init/sensu_client_template.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!DOCTYPE service_bundle SYSTEM
+    "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
+
+<service_bundle type="manifest" name="sensu-client">
+  <service name="site/sensu-client" type="service" version="1">
+    <create_default_instance enabled="false" />
+
+    <!-- Dependencies -->
+    <dependency
+        name="filesystem-local" grouping="require_all"
+        restart_on="restart" type="service">
+        <service_fmri value="svc:/system/filesystem/local:default" />
+    </dependency>
+
+    <!-- Execution method for start and stop -->
+    <exec_method
+         type="method" name="start"
+         exec="SENSU_HOME/app/sbin/sensu_svcs_wrapper.sh start" timeout_seconds="60" >
+      <method_context>
+          <method_credential user="root" group="root" />
+      </method_context>
+    </exec_method>
+
+    <exec_method
+       type="method" name="stop"
+       exec="SENSU_HOME/app/sbin/sensu_svcs_wrapper.sh stop" timeout_seconds="60" >
+    </exec_method>
+
+    <template>
+       <common_name>
+         <loctext xml:lang="C">Sensu Client (SE)</loctext>
+       </common_name>
+       <documentation>
+          <manpage title="No man" section="99" manpath="/dev/null" />
+       </documentation>
+    </template>
+  </service>
+</service_bundle>

+ 20 - 0
app/init/start_sensu_client.sh

@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+
+# Starts up Sensu Client
+
+# Default settings, can be overridden in ${HOME}/etc/sensu/sensu.env
+export PATH=${HOME}/app/bin:${HOME}/app/sbin:/opt/local/sbin:/opt/local/bin:$PATH
+CONFIG_FOLDER=${HOME}/etc/sensu/conf.d
+PID_FILE=${HOME}/run/sensu-client.pid
+LOG_FILE=${HOME}/log/sensu-client.log
+LOG_LEVEL=info
+
+if [ -f ${HOME}/etc/sensu/sensu.env ]; then
+   . ${HOME}/etc/sensu/sensu.env
+fi
+
+${HOME}/app/bin/bundle exec ${HOME}/app/bin/sensu-client -b \
+  -d ${CONFIG_FOLDER} \
+  -p ${PID_FILE} \
+  -l ${LOG_FILE} \
+  -L ${LOG_LEVEL}

+ 26 - 0
app/init/stop_sensu_client.sh

@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+# Stop the Sensu Client
+
+BIN_KILL=/usr/bin/kill
+BIN_STAT=/usr/bin/stat
+BIN_CAT=/usr/bin/cat
+
+# Default settings, can be overridden in ${HOME}/etc/sensu/sensu.env
+export PATH=${HOME}/app/bin:${HOME}/app/sbin:/opt/local/sbin:/opt/local/bin:$PATH
+PID_FILE=${HOME}/run/sensu-client.pid
+
+if [ -f ${HOME}/etc/sensu/sensu.env ]; then
+   . ${HOME}/etc/sensu/sensu.env
+fi
+
+if [ -f ${PID_FILE} ] && [ `${BIN_STAT} --printf=%s ${PID_FILE}` -gt 0 ]; then
+   echo "Stopping sensu client.."
+   ${BIN_KILL} `${BIN_CAT} ${PID_FILE}`
+   exit_code=${?}
+else
+   echo "Pidfile not found"
+   exit_code=20
+fi
+
+exit ${exit_code}

+ 17 - 0
app/sbin/sensu_svcs_wrapper.sh

@@ -0,0 +1,17 @@
+#!/usr/bin/bash
+
+# Wrapper script for starting/stopping sensu. Intended to be called from svcadm
+SENSU_HOME=`/usr/bin/su - sensu -c "/bin/bash -c \"export\"" | egrep "declare -x HOME" | cut -f 2 -d = | sed -e 's/\"//g'`
+
+case "${1}" in
+'start')
+   /usr/bin/su -  sensu -c ${SENSU_HOME}/app/init/start_sensu_client.sh
+   ;;
+'stop')
+   /usr/bin/su -  sensu -c ${SENSU_HOME}/app/init/stop_sensu_client.sh
+   ;;
+*)
+   echo "Usage: ${0} (start|stop)"
+   exit 1;
+   ;;
+esac

+ 23 - 0
buildscripts/build_prometheus_exporters.sh

@@ -0,0 +1,23 @@
+#!/usr/bin/bash
+
+# Build Prometheus exporters
+
+umask 022
+
+BIN_RM=/usr/bin/rm
+BIN_MKDIR=/usr/bin/mkdir
+BIN_GO=/opt/local/bin/go
+BIN_CP=/usr/bin/cp
+BIN_CHMOD=/usr/bin/chmod
+BIN_CAT=/usr/bin/cat
+
+export PATH=${HOME}/go/bin:${HOME}/app/bin:${HOME}/app/sbin:/opt/local/sbin:/opt/local/bin:$PATH
+
+for exporter in `${BIN_CAT} buildscripts/prometheus_exporters`; do
+   ${BIN_GO} get ${exporter}
+   ${BIN_GO} build ${exporter}
+   ${BIN_GO} install ${exporter}
+done
+
+${BIN_CP} ${HOME}/go/bin/* ${HOME}/app/bin/prometheus/.
+${BIN_CHMOD} 0755 ${HOME}/app/bin/prometheus/*

+ 17 - 0
buildscripts/build_sensu.sh

@@ -0,0 +1,17 @@
+#!/usr/bin/bash
+
+# Build Sensu and associated plugins
+
+umask 022
+
+BIN_RM=/usr/bin/rm
+BIN_MKDIR=/usr/bin/mkdir
+BIN_BUNDLER=/opt/local/bin/bundler
+BIN_CP=/usr/bin/cp
+
+${BIN_CP} -Rp app/* ${HOME}/app/.
+${BIN_CP} -Rp sensu ${HOME}/etc/.
+cd ${HOME}/app
+
+${BIN_BUNDLER} install --path vendor/bundler
+${BIN_BUNDLER} install --binstubs

+ 17 - 0
buildscripts/clean.sh

@@ -0,0 +1,17 @@
+#!/usr/bin/bash
+
+# Reset build folders
+
+umask 022
+
+BIN_RM=/usr/bin/rm
+BIN_MKDIR=/usr/bin/mkdir
+
+FOLDER_LIST="target log run etc app app/bin app/bin/prometheus app/sbin app/vendor"
+
+echo "Resetting build folders..."
+for folder in ${FOLDER_LIST}; do
+   echo "Resetting ${HOME}/${folder}"
+   ${BIN_RM} -rf ${HOME}/${folder}
+   ${BIN_MKDIR} ${HOME}/${folder}
+done

+ 29 - 0
buildscripts/deploy_artefact.sh

@@ -0,0 +1,29 @@
+#!/bin/bash
+
+umask 022
+
+BIN_TAR=/usr/bin/gtar
+BIN_UNAME=/usr/bin/uname
+BIN_CURL=/opt/local/bin/curl
+BIN_SHASUM=/opt/local/bin/shasum
+BIN_MD5SUM=/ec/bin/md5sum
+
+export PATH=${HOME}/go/bin:${HOME}/app/bin:${HOME}/app/sbin:/opt/local/sbin:/opt/local/bin:$PATH
+package_file_name=sensu-`${BIN_UNAME} -s`-`${BIN_UNAME} -r`.tgz
+deployment_url="${ARTIFACTORY_URL}/sensu/BUILD_${BUILD_ID}/${package_file_name}"
+
+cd ${HOME}
+
+SHA1SUM=$(${BIN_SHASUM} -a 1 target/${package_file_name} | awk '{print $1}')
+SHA256SUM=$(${BIN_SHASUM} -a 256 target/${package_file_name} | awk '{print $1}')
+MD5SUM=$(${BIN_MD5SUM} target/${package_file_name} | awk '{print $1}')
+
+${BIN_CURL} -XPUT \
+   -H "X-JFrog-Art-Api: ${APIKEY}" \
+   -H "X-Checksum-Md5: ${MD5SUM}" \
+   -H "X-Checksum-Sha1: ${SHA1SUM}" \
+   -H "X-Checksum-Sha256: ${SHA256SUM}" \
+   -T target/${package_file_name} ${deployment_url}
+
+# ${BIN_CURL} -XPUT -H \"X-JFrog-Art-Api: ${APIKEY}\" -T target/${package_file_name} ${deployment_url}
+

+ 20 - 0
buildscripts/package_artefact.sh

@@ -0,0 +1,20 @@
+#!/bin/bash
+
+umask 022
+
+BIN_RM=/usr/bin/rm
+BIN_MKDIR=/usr/bin/mkdir
+BIN_CP=/usr/bin/cp
+BIN_CHMOD=/usr/bin/chmod
+BIN_TAR=/usr/bin/gtar
+BIN_UNAME=/usr/bin/uname
+BIN_ECHO=/usr/bin/echo
+
+export PATH=${HOME}/go/bin:${HOME}/app/bin:${HOME}/app/sbin:/opt/local/sbin:/opt/local/bin:$PATH
+package_file_name=sensu-`${BIN_UNAME} -s`-`${BIN_UNAME} -r`.tgz
+
+cd ${HOME}
+
+${BIN_MKDIR} -p target
+${BIN_ECHO} ${BUILD_ID} > BUILD_NUMBER.txt
+${BIN_TAR} cpzf target/${package_file_name} app etc log run BUILD_NUMBER.txt

+ 2 - 0
buildscripts/prometheus_exporters

@@ -0,0 +1,2 @@
+github.com/oliver006/redis_exporter
+github.com/Lusitaniae/apache_exporter

+ 4 - 0
buildscripts/show_vars.sh

@@ -0,0 +1,4 @@
+#!/usr/bin/bash
+
+# Show environment vars
+export

+ 18 - 0
buildscripts/test_artefact.sh

@@ -0,0 +1,18 @@
+#!/bin/bash
+
+umask 022
+
+BIN_TAR=/usr/bin/gtar
+BIN_UNAME=/usr/bin/uname
+
+export PATH=${HOME}/go/bin:${HOME}/app/bin:${HOME}/app/sbin:/opt/local/sbin:/opt/local/bin:$PATH
+package_file_name=sensu-`${BIN_UNAME} -s`-`${BIN_UNAME} -r`.tgz
+
+cd ${HOME}
+
+${BIN_TAR} tzf target/${package_file_name} app etc log run
+if [ ${?} -eq 0 ]; then
+   echo "Success"
+else
+   echo "Failed (err code = {$?})"
+fi

+ 18 - 0
sensu/sensu.env

@@ -0,0 +1,18 @@
+# PATH variable
+PATH=${HOME}/app/bin:${HOME}/app/sbin:/opt/local/sbin:/opt/local/bin:$PATH
+
+# Don't delete the next line!
+export PATH
+
+# Path to Sensu comnfig folder
+
+CONFIG_FOLDER=${HOME}/etc/sensu/conf.d
+
+# Path to Sensu PID file
+PID_FILE=${HOME}/run/sensu-client.pid
+
+# Path to Sensu Log File
+LOG_FILE=${HOME}/log/sensu-client.log
+
+# Sensu Logging Level
+LOG_LEVEL=info