Skip to content

Commit

Permalink
add usage for command line + improve error handling + update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
hiradyazdan committed May 27, 2018
1 parent 1cfe52c commit ae45f08
Show file tree
Hide file tree
Showing 10 changed files with 529 additions and 179 deletions.
104 changes: 103 additions & 1 deletion README.md
@@ -1,8 +1,110 @@
# NGINX Amplify Agent Health Check

[![PyPI version](https://img.shields.io/pypi/v/nginx-amplify-agent-health-check.svg)](https://pypi.org/project/nginx-amplify-agent-health-check)
[![Python versions](https://img.shields.io/pypi/pyversions/nginx-amplify-agent-health-check.svg)](https://pypi.org/project/nginx-amplify-agent-health-check)
[![License](https://img.shields.io/pypi/l/nginx-amplify-agent-health-check.svg)](https://github.com/hiradyazdan/nginx-amplify-agent-health-check/blob/master/LICENSE.txt)

[![CircleCI](https://circleci.com/gh/hiradyazdan/nginx-amplify-agent-health-check.svg?style=shield&circle-token=592d09559d8a59748ff9d1870a83cb5eb9cc621c)](https://circleci.com/gh/hiradyazdan/nginx-amplify-agent-health-check)
[![Coverage Status](https://coveralls.io/repos/github/hiradyazdan/nginx-amplify-agent-health-check/badge.svg?branch=master)](https://coveralls.io/github/hiradyazdan/nginx-amplify-agent-health-check?branch=master)
[![Code Health](https://landscape.io/github/hiradyazdan/nginx-amplify-agent-health-check/master/landscape.svg?style=flat&badge_auth_token=49645f59a46e447e823775fa30645d54)](https://landscape.io/github/hiradyazdan/nginx-amplify-agent-health-check/master)
[![Requirements Status](https://requires.io/github/hiradyazdan/nginx-amplify-agent-health-check/requirements.svg?branch=master)](https://requires.io/github/hiradyazdan/nginx-amplify-agent-health-check/requirements/?branch=master)
[![License](https://img.shields.io/pypi/l/nginx-amplify-agent-health-check.svg)](https://github.com/hiradyazdan/nginx-amplify-agent-health-check/blob/master/LICENSE.txt)

## Setup

```shell
pip install nginx-amplify-agent-health-check
```

## Usage

#### via Command Line:

```shell
amphc
```

#### via the API:

```python
import amplifyhealthcheck as amphc

amplify_agent_path = '/opt/nginx-amplify-agent'
amplify_reqs_file = '/packages/nginx-amplify-agent/requirements'
amplify_conf_file = '/etc/amplify-agent/agent.conf'
amplify_log_file = '/var/log/amplify-agent/agent.log'
amplify_pid_file = '/var/run/amplify-agent/amplify-agent.pid'

nginx_all_confs_path = '/etc/nginx'
nginx_conf_file = '/etc/nginx/nginx.conf'
nginx_status_conf_file = '/etc/nginx/conf.d/stub_status.conf'
nginx_mime_types_file = '/etc/nginx/mime.types'
nginx_sites_available_conf_files = '/etc/nginx/sites-available/*.conf'
nginx_sites_enabled_conf_files = '/etc/nginx/sites-enabled/*.conf'
nginx_pid_file = '/var/run/nginx.pid'
nginx_log_files = '/var/log/nginx/*.log'
nginx_additional_metrics = [
'sn="$server_name"',
'rt=$request_time',
'ua="$upstream_addr"',
'us="$upstream_status"',
'ut="$upstream_response_time"',
'ul="$upstream_response_length"',
'cs=$upstream_cache_status'
]

system_packages = [
'python', 'python-dev',
'git',
'util-linux', 'procps',
'curl', # 'wget',
'gcc', 'musl-dev', 'linux-headers'
]
system_find_package_command = ['apk', 'info']

amphc = amphc.configure(
verbose=False,
decorate_mode=True,
heading='Amplify Agent Health Check Analysis',

# Amplify
amplify_agent_path=amplify_agent_path,
amplify_reqs_file=amplify_reqs_file,
amplify_conf_file=amplify_conf_file,
amplify_log_file=amplify_log_file,
amplify_pid_file=amplify_pid_file,

# Nginx
nginx_all_confs_path=nginx_all_confs_path,
nginx_conf_file=nginx_conf_file,
nginx_status_conf_file=nginx_status_conf_file,
nginx_sites_available_conf_files=nginx_sites_available_conf_files,
nginx_sites_enabled_conf_files=nginx_sites_enabled_conf_files,
nginx_mime_types_file=nginx_mime_types_file,
nginx_log_files=nginx_log_files,
nginx_pid_file=nginx_pid_file,
nginx_additional_metrics=nginx_additional_metrics,

# System
system_packages=system_packages,
system_find_package_command=system_find_package_command,
system_time_diff_max_allowance=80
)

amphc.verify_agent_ps()
amphc.verify_agent_log()
amphc.verify_agent_user()

amphc.verify_ngx_master_ps()
amphc.verify_ngx_stub_status()
amphc.verify_ngx_logs_read_access()
amphc.verify_ngx_config_files_access()
amphc.verify_ngx_metrics()

amphc.verify_all_packages()
amphc.verify_sys_time()
amphc.verify_sys_ps_access()
amphc.verify_outbound_tls_access()
amphc.verify_proc_sys_access()
amphc.verify_dns_resolver()
amphc.verify_metrics_collection()
```
60 changes: 42 additions & 18 deletions amplifyhealthcheck/__init__.py
Expand Up @@ -6,30 +6,49 @@

from healthcheck import AmplifyAgentHealthCheck

amplify_agent_path = '/opt/nginx-amplify-agent'
requirements_file = '/packages/nginx-amplify-agent/requirements'
amplify_conf_file = '/etc/amplify-agent/agent.conf'
amplify_log_file = '/var/log/amplify-agent/agent.log'
amplify_pid_file = '/var/run/amplify-agent/amplify-agent.pid'

nginx_all_confs_path = '/etc/nginx'
nginx_conf_file = '/etc/nginx/nginx.conf'
nginx_status_conf_file = '/etc/nginx/conf.d/stub_status.conf'
nginx_mime_types_file = '/etc/nginx/mime.types'
nginx_sites_available_conf_files = '/etc/nginx/sites-available/*.conf'
nginx_sites_enabled_conf_files = '/etc/nginx/sites-enabled/*.conf'
nginx_pid_file = '/var/run/nginx.pid'
nginx_log_files = '/var/log/nginx/*.log'


def configure(**attrs):
return AmplifyAgentHealthCheck(
verbose=attrs.get('verbose', False),
amplify_agent_path = '/opt/nginx-amplify-agent'
amplify_reqs_file = '/packages/nginx-amplify-agent/requirements'
amplify_conf_file = '/etc/amplify-agent/agent.conf'
amplify_log_file = '/var/log/amplify-agent/agent.log'
amplify_pid_file = '/var/run/amplify-agent/amplify-agent.pid'

nginx_all_confs_path = '/etc/nginx'
nginx_conf_file = '/etc/nginx/nginx.conf'
nginx_status_conf_file = '/etc/nginx/conf.d/stub_status.conf'
nginx_mime_types_file = '/etc/nginx/mime.types'
nginx_sites_available_conf_files = '/etc/nginx/sites-available/*.conf'
nginx_sites_enabled_conf_files = '/etc/nginx/sites-enabled/*.conf'
nginx_pid_file = '/var/run/nginx.pid'
nginx_log_files = '/var/log/nginx/*.log'
nginx_additional_metrics = [
'sn="$server_name"',
'rt=$request_time',
'ua="$upstream_addr"',
'us="$upstream_status"',
'ut="$upstream_response_time"',
'ul="$upstream_response_length"',
'cs=$upstream_cache_status'
]

system_packages = [
'python', 'python-dev',
'git',
'util-linux', 'procps',
'curl', # 'wget',
'gcc', 'musl-dev', 'linux-headers'
]
system_find_package_command = ['apk', 'info']

amphc = AmplifyAgentHealthCheck(
verbose=attrs.get('verbose', True),
decorate_mode=attrs.get('decorate_mode', True),
heading=attrs.get('heading', 'Amplify Agent Health Check Analysis'),

# Amplify
amplify_agent_path=attrs.get('amplify_agent_path', amplify_agent_path),
amplify_reqs_file=attrs.get('amplify_reqs_file', amplify_reqs_file),
amplify_conf_file=attrs.get('amplify_conf_file', amplify_conf_file),
amplify_log_file=attrs.get('amplify_log_file', amplify_log_file),
amplify_pid_file=attrs.get('amplify_pid_file', amplify_pid_file),
Expand All @@ -43,7 +62,12 @@ def configure(**attrs):
nginx_mime_types_file=attrs.get('nginx_mime_types_file', nginx_mime_types_file),
nginx_log_files=attrs.get('nginx_log_files', nginx_log_files),
nginx_pid_file=attrs.get('nginx_pid_file', nginx_pid_file),
nginx_additional_metrics=attrs.get('nginx_additional_metrics', nginx_additional_metrics),

# System
max_time_diff_allowance=attrs.get('max_time_diff_allowance', 80)
system_packages=attrs.get('system_packages', system_packages),
system_find_package_command=attrs.get('system_find_package_command', system_find_package_command),
system_time_diff_max_allowance=attrs.get('system_time_diff_max_allowance', 80)
).configure().generate_output()

return amphc
5 changes: 3 additions & 2 deletions amplifyhealthcheck/base.py
Expand Up @@ -52,7 +52,8 @@ def dir_tree(self, dir_path, file_ext=None):
else:
tree.append(os.path.join(root, filename))

tree.pop(0)
if len(tree) > 0:
tree.pop(0)

return tree

Expand Down Expand Up @@ -140,7 +141,7 @@ def pretty_print(self, message, message_type=''):

def decorate(self):
if self.decorate_mode:
lines = ['check {0} - {1}'.format(i + 1, log) for i, log in enumerate(self.logs)]
lines = ['check {0} - {1}'.format(i + 1, log) for i, log in enumerate(sorted(set(self.logs)))]
spchar_extra_width = len(self.mark + self.no_color) - 1
width = max(len(line) for line in lines)

Expand Down
84 changes: 84 additions & 0 deletions amplifyhealthcheck/cmd.py
@@ -0,0 +1,84 @@
# -*- coding: utf-8 -*-

__author__ = "Hirad Yazdanpanah"
__license__ = "MIT"
__maintainer__ = "Hirad Yazdanpanah"

from healthcheck import AmplifyAgentHealthCheck


def main(**attrs):
amplify_agent_path = '/opt/nginx-amplify-agent'
amplify_reqs_file = '/packages/nginx-amplify-agent/requirements'
amplify_conf_file = '/etc/amplify-agent/agent.conf'
amplify_log_file = '/var/log/amplify-agent/agent.log'
amplify_pid_file = '/var/run/amplify-agent/amplify-agent.pid'

nginx_all_confs_path = '/etc/nginx'
nginx_conf_file = '/etc/nginx/nginx.conf'
nginx_status_conf_file = '/etc/nginx/conf.d/stub_status.conf'
nginx_mime_types_file = '/etc/nginx/mime.types'
nginx_sites_available_conf_files = '/etc/nginx/sites-available/*.conf'
nginx_sites_enabled_conf_files = '/etc/nginx/sites-enabled/*.conf'
nginx_pid_file = '/var/run/nginx.pid'
nginx_log_files = '/var/log/nginx/*.log'
nginx_additional_metrics = [
'sn="$server_name"',
'rt=$request_time',
'ua="$upstream_addr"',
'us="$upstream_status"',
'ut="$upstream_response_time"',
'ul="$upstream_response_length"',
'cs=$upstream_cache_status'
]

system_packages = [
'python', 'python-dev',
'git',
'util-linux', 'procps',
'curl', # 'wget',
'gcc', 'musl-dev', 'linux-headers'
]
system_find_package_command = ['apk', 'info']

amphc = AmplifyAgentHealthCheck(
verbose=attrs.get('verbose', True),
decorate_mode=attrs.get('decorate_mode', True),
heading=attrs.get('heading', 'Amplify Agent Health Check Analysis'),

# Amplify
amplify_agent_path=attrs.get('amplify_agent_path', amplify_agent_path),
amplify_reqs_file=attrs.get('amplify_reqs_file', amplify_reqs_file),
amplify_conf_file=attrs.get('amplify_conf_file', amplify_conf_file),
amplify_log_file=attrs.get('amplify_log_file', amplify_log_file),
amplify_pid_file=attrs.get('amplify_pid_file', amplify_pid_file),

# Nginx
nginx_all_confs_path=nginx_all_confs_path,
nginx_conf_file=attrs.get('nginx_conf_file', nginx_conf_file),
nginx_status_conf_file=attrs.get('nginx_status_conf_file', nginx_status_conf_file),
nginx_sites_available_conf_files=attrs.get('nginx_sites_available_conf_files', nginx_sites_available_conf_files),
nginx_sites_enabled_conf_files=attrs.get('nginx_sites_enabled_conf_files', nginx_sites_enabled_conf_files),
nginx_mime_types_file=attrs.get('nginx_mime_types_file', nginx_mime_types_file),
nginx_log_files=attrs.get('nginx_log_files', nginx_log_files),
nginx_pid_file=attrs.get('nginx_pid_file', nginx_pid_file),
nginx_additional_metrics=attrs.get('nginx_additional_metrics', nginx_additional_metrics),

# System
system_packages=attrs.get('system_packages', system_packages),
system_find_package_command=attrs.get('system_find_package_command', system_find_package_command),
system_time_diff_max_allowance=attrs.get('system_time_diff_max_allowance', 80)
).configure().generate_output()

print amphc

public_methods = [
method for method in dir(amphc)
if callable(getattr(amphc, method))
and method.startswith('verify_')
and not method.startswith('_')
and not method.startswith('verify_all_')
]

for method in public_methods:
getattr(amphc, method)()

0 comments on commit ae45f08

Please sign in to comment.