Last active
February 9, 2021 20:47
-
-
Save fdns/8032710eceea0a2c63c1b4f0a5da8ec1 to your computer and use it in GitHub Desktop.
Version extraction for OpenedX
This file contains hidden or 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