-
-
Save sibil/71d911c106d499a97edd0f7cebe81d37 to your computer and use it in GitHub Desktop.
Version extraction for OpenedX
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
# Run me with sudo ./version.py > result | |
import csv | |
import sys | |
import os | |
import re | |
class VersionAnalyzer: | |
def __init__(self): | |
self.out = csv.writer(sys.stdout) | |
self._header() | |
def _header(self): | |
self.out.writerow(["Service", "Software", "Version"]) | |
def _write(self, service, software, version): | |
self.out.writerow([service, software, version]) | |
def _execute(self, command, regex): | |
output = os.popen(command).read() | |
regex = re.compile(regex) | |
m = regex.search(output) | |
try: | |
return m.group('version') | |
except Exception: | |
return "?" | |
def mysql(self): | |
regex = "^mysql Ver 14\.14 Distrib (?P<version>(\w|\.)+).*$" | |
version = self._execute('mysql --version', regex) | |
self._write('System', 'mysql', version) | |
def mongodb(self): | |
regex = "db version v(?P<version>(\w|\.)+).*" | |
version = self._execute('mongod --version', regex) | |
self._write('System', 'mongodb', version) | |
def rabbitmq(self): | |
regex = "{rabbit,\"RabbitMQ\",\"(?P<version>(\w|\.)+).*\"},.*" | |
version = self._execute('rabbitmqctl status', regex) | |
self._write('System', 'rabbitmq', version) | |
def memcached(self): | |
regex = "memcached (?P<version>(\w|\.)+).*" | |
version = self._execute('memcached -V', regex) | |
self._write('System', 'memcached', version) | |
def elasticsearch(self): | |
regex = "\"number\" : \"(?P<version>(\w|\.)+)\".*" | |
version = self._execute('curl -XGET http://localhost:9200', regex) | |
self._write('System', 'elasticsearch', version) | |
def node(self, service='System', bin='node'): | |
regex = "(?P<version>(\w|\.)+)" | |
version = self._execute('{bin} --version'.format(bin=bin), regex) | |
self._write(service, 'node', version) | |
def npm(self, service='System', bin='npm'): | |
regex = "(?P<version>(\w|\.)+)" | |
version = self._execute('{bin} --version'.format(bin=bin), regex) | |
self._write(service, 'npm', version) | |
def python(self, service='System', bin='python'): | |
regex = ".*Python (?P<version>(\w|\.)+).*" | |
version = self._execute('{bin} --version 2>&1'.format(bin=bin), regex) | |
self._write(service, 'python', version) | |
def ruby(self, service, bin): | |
regex = ".*ruby (?P<version>(\w|\.)+).*" | |
version = self._execute('{bin} --version'.format(bin=bin), regex) | |
self._write(service, 'ruby', version) | |
def gem(self, service, bin): | |
regex = "(?P<version>(\w|\.)+)" | |
version = self._execute('{bin} --version'.format(bin=bin), regex) | |
self._write(service, 'gem', version) | |
if __name__ == '__main__': | |
version = VersionAnalyzer() | |
version.mysql() | |
version.mongodb() | |
version.rabbitmq() | |
version.memcached() | |
version.elasticsearch() | |
version.node() | |
version.npm() | |
version.python() | |
version.python('edx-platform', '/edx/app/edxapp/venvs/edxapp/bin/python') | |
version.python('edx-sandbox', '/edx/app/edxapp/venvs/edxapp-sandbox/bin/python') | |
version.python('certs', '/edx/app/certs/venvs/certs/bin/python') | |
version.python('discovery', '/edx/app/discovery/venvs/discovery/bin/python') | |
version.python('ecommerce', '/edx/app/ecommerce/venvs/ecommerce/bin/python') | |
version.python('insight', '/edx/app/insights/venvs/insights/bin/python') | |
version.python('xqueue', '/edx/app/xqueue/venvs/xqueue/bin/python') | |
version.node('mfe', '/edx/app/profile/nodeenvs/profile/bin/node') | |
version.npm('mfe', '/edx/app/profile/nodeenvs/profile/bin/npm') | |
version.ruby('forum', '/edx/app/forum/.rbenv/shims/ruby') | |
version.gem('forum', '/edx/app/forum/.rbenv/shims/gem') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment