From a8502ab17d8132502a4976e5feb82284d0015a6f Mon Sep 17 00:00:00 2001 From: schneefux Date: Fri, 12 Sep 2014 06:34:19 +0100 Subject: Added extra diagnostics - Check if say or espeak are installed - Check if all pip requirements were installed --- client/diagnose.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'client') diff --git a/client/diagnose.py b/client/diagnose.py index 28cd9c8..5249965 100755 --- a/client/diagnose.py +++ b/client/diagnose.py @@ -3,8 +3,9 @@ import time import re import socket import os -from subprocess import check_output, call import jasperpath +import subprocess +from distutils.spawn import find_executable class Diagnostics: @@ -36,11 +37,33 @@ class Diagnostics: @classmethod def check_phonetisaurus_program(cls): - return call(['which', 'phonetisaurus-g2p']) == 0 + return cls.do_check_program('phonetisaurus-g2p') + + @classmethod + def check_espeak_program(cls): + return cls.do_check_program('espeak') + + @classmethod + def check_say_program(cls): + return cls.do_check_program('say') + + @classmethod + def do_check_program(cls, program): + return find_executable(program) is not None + + @classmethod + def check_all_pip_requirements_installed(cls): + try: + cmd = ['pip', 'install', '-r', 'requirements.txt', '--no-install', '--no-download'] + reqs = subprocess.check_output(cmd) + except subprocess.CalledProcessError: + return False + else: + return True @classmethod def info_git_revision(cls): - return check_output(['git', 'rev-parse', 'HEAD']) + return subprocess.check_output(['git', 'rev-parse', 'HEAD']) class DiagnosticRunner: -- cgit v1.3.1 From 98b6f386826ed201194984bfdeab83252ed2a9ef Mon Sep 17 00:00:00 2001 From: schneefux Date: Fri, 12 Sep 2014 16:16:02 +0100 Subject: Use pip module for checking packages --- client/diagnose.py | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) (limited to 'client') diff --git a/client/diagnose.py b/client/diagnose.py index 5249965..815abc1 100755 --- a/client/diagnose.py +++ b/client/diagnose.py @@ -5,7 +5,10 @@ import socket import os import jasperpath import subprocess +import logging from distutils.spawn import find_executable +from pip.req import parse_requirements +from pip.commands.show import search_packages_info class Diagnostics: @@ -53,10 +56,12 @@ class Diagnostics: @classmethod def check_all_pip_requirements_installed(cls): - try: - cmd = ['pip', 'install', '-r', 'requirements.txt', '--no-install', '--no-download'] - reqs = subprocess.check_output(cmd) - except subprocess.CalledProcessError: + requirements = list(parse_requirements('requirements.txt')) + packages = [ req.name for req in requirements ] + installed_packages = [ pkg['name'] for pkg in list(search_packages_info(packages))] + missing_packages = [ pkg for pkg in packages if pkg not in installed_packages ] + if missing_packages: + log("Missing packages: "+', '.join(missing_packages)) return False else: return True @@ -77,6 +82,7 @@ class DiagnosticRunner: self.diagnostics = diagnostics def run(self): + initialize_log() self.initialize_log() self.perform_checks() @@ -87,9 +93,9 @@ class DiagnosticRunner: for info in self.select_methods('info'): self.get_info(info) if self.failed_checks == 0: - self.log("All checks passed\n") + log("All checks passed") else: - self.log("%d checks failed\n" % self.failed_checks) + log("%d checks failed" % self.failed_checks) def select_methods(self, prefix): def is_match(method_name): @@ -98,30 +104,25 @@ class DiagnosticRunner: return [method_name for method_name in dir(self.diagnostics) if is_match(method_name)] def initialize_log(self): - self.output = open('diagnostic.log', 'w') - self.log("Starting jasper diagnostic\n") - self.log(time.strftime("%c") + "\n") - - def log(self, msg): - print msg, - self.output.write(msg) + log("Starting jasper diagnostic") + log(time.strftime("%c")) def get_info(self, info_name): message = info_name.replace("info_", "").replace("_", " ") info_method = getattr(self.diagnostics, info_name) info = info_method() - self.log("%s: %s" % (message, info)) + log("%s: %s" % (message, info)) def do_check(self, check_name): message = check_name.replace("check_", "").replace("_", " ") check = getattr(self.diagnostics, check_name) - self.log("Checking %s... " % message) if check(): - self.log("OK") + result = "OK" else: self.failed_checks += 1 - self.log("FAILED") - self.log("\n") + result = "FAILED" + + log("Checking %s... %s" % (message, result)) if __name__ == '__main__': -- cgit v1.3.1 From 5571c2b0e755612018e8cb6438d1f026c18fe47d Mon Sep 17 00:00:00 2001 From: schneefux Date: Sun, 14 Sep 2014 15:46:10 +0100 Subject: Using logging module for logs --- client/diagnose.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'client') diff --git a/client/diagnose.py b/client/diagnose.py index 815abc1..c07fef6 100755 --- a/client/diagnose.py +++ b/client/diagnose.py @@ -6,10 +6,13 @@ import os import jasperpath import subprocess import logging +import sys from distutils.spawn import find_executable from pip.req import parse_requirements from pip.commands.show import search_packages_info +logger = logging.getLogger(__name__) + class Diagnostics: """ @@ -61,7 +64,7 @@ class Diagnostics: installed_packages = [ pkg['name'] for pkg in list(search_packages_info(packages))] missing_packages = [ pkg for pkg in packages if pkg not in installed_packages ] if missing_packages: - log("Missing packages: "+', '.join(missing_packages)) + logger.info("Missing packages: "+', '.join(missing_packages)) return False else: return True @@ -82,7 +85,6 @@ class DiagnosticRunner: self.diagnostics = diagnostics def run(self): - initialize_log() self.initialize_log() self.perform_checks() @@ -93,9 +95,9 @@ class DiagnosticRunner: for info in self.select_methods('info'): self.get_info(info) if self.failed_checks == 0: - log("All checks passed") + logger.info("All checks passed") else: - log("%d checks failed" % self.failed_checks) + logger.info("%d checks failed" % self.failed_checks) def select_methods(self, prefix): def is_match(method_name): @@ -104,14 +106,13 @@ class DiagnosticRunner: return [method_name for method_name in dir(self.diagnostics) if is_match(method_name)] def initialize_log(self): - log("Starting jasper diagnostic") - log(time.strftime("%c")) + logger.info("Starting jasper diagnostic at %s" % time.strftime("%c")) def get_info(self, info_name): message = info_name.replace("info_", "").replace("_", " ") info_method = getattr(self.diagnostics, info_name) info = info_method() - log("%s: %s" % (message, info)) + logger.info("%s: %s" % (message, info)) def do_check(self, check_name): message = check_name.replace("check_", "").replace("_", " ") @@ -122,8 +123,12 @@ class DiagnosticRunner: self.failed_checks += 1 result = "FAILED" - log("Checking %s... %s" % (message, result)) + logger.info("Checking %s... %s" % (message, result)) if __name__ == '__main__': + logging.basicConfig(stream=sys.stdout, level=logging.INFO) + DiagnosticRunner(Diagnostics).run() + + -- cgit v1.3.1 From abfe22753e59b14cdc1540ab2fd9eee17a11764f Mon Sep 17 00:00:00 2001 From: schneefux Date: Tue, 23 Sep 2014 06:12:02 +0000 Subject: Changed pip package processing --- client/diagnose.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'client') diff --git a/client/diagnose.py b/client/diagnose.py index c07fef6..9e2c68f 100755 --- a/client/diagnose.py +++ b/client/diagnose.py @@ -9,7 +9,7 @@ import logging import sys from distutils.spawn import find_executable from pip.req import parse_requirements -from pip.commands.show import search_packages_info +import pip.util logger = logging.getLogger(__name__) @@ -59,10 +59,11 @@ class Diagnostics: @classmethod def check_all_pip_requirements_installed(cls): - requirements = list(parse_requirements('requirements.txt')) - packages = [ req.name for req in requirements ] - installed_packages = [ pkg['name'] for pkg in list(search_packages_info(packages))] - missing_packages = [ pkg for pkg in packages if pkg not in installed_packages ] + distributions = pip.util.get_installed_distributions() + requirements_lines = [line.strip() for line in open('requirements.txt').readlines()] + requirements = [ name.split('==')[0] for name in list(filter(None, requirements_lines))] + installed_packages = [ pkg.project_name for pkg in list(distributions)] + missing_packages = [ pkg for pkg in requirements if pkg not in installed_packages ] if missing_packages: logger.info("Missing packages: "+', '.join(missing_packages)) return False -- cgit v1.3.1