Skip to content

Instantly share code, notes, and snippets.

@fdns
Last active February 9, 2021 20:47
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save fdns/8032710eceea0a2c63c1b4f0a5da8ec1 to your computer and use it in GitHub Desktop.
Save fdns/8032710eceea0a2c63c1b4f0a5da8ec1 to your computer and use it in GitHub Desktop.
Version extraction for OpenedX
#!/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