#!/usr/bin/env python
import subprocess
import os
import re


def execute_shell(command):
    p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    (out, err) = p.communicate()
    return out

def get(param):
    value = execute_shell('/sbin/sysctl %s' % (param))
    clean = re.sub('\s+','', value.decode('utf-8'))
    sysctl_value = clean.split('=')
    return sysctl_value[1]

def set(param, value):
    command = ('/sbin/sysctl -w %s=%s' % (param, value))
    execute_shell(command)

def percent_check(percent):
    gb4 = int(4194304)
    meminfo = dict((i.split()[0].rstrip(':'),int(i.split()[1])) for i in open('/proc/meminfo').readlines())
    mem_kib = meminfo['MemTotal']
    percentage = '{0:.0f}'.format(percent * mem_kib / 100.0)
    if int(percentage) >= gb4:
       print("2%% of %s is equal or greater than 4gb" % (int(mem_kib)))
       print("curent value is %s" %(get('vm.min_free_kbytes')))
       print("need to set vm.min_free_kbytes to %s" %(gb4))
       set('vm.min_free_kbytes', gb4)
    if int(percentage) < gb4:
       print("2%% of [%s] is [%s]" % (int(mem_kib), int(percentage)))
       print("curent value is [%s]" %(get('vm.min_free_kbytes')))
       print("need to set vm.min_free_kbytes to %s" %(int(percentage)))
       set('vm.min_free_kbytes', percentage)

def main():
    percent_check(2)

if __name__ == "__main__":
    main()
