misc = require('smc-util/misc')
exports.quota = (settings, users) ->
settings ?= {}
users ?= {}
quota =
network : false
member_host : false
disk_quota : 3000
memory_limit : 1000
memory_request : 100
cpu_limit : 1
cpu_request : 0
privileged : false
if settings.network
quota.network = true
else
for _,val of users
if val?.upgrades?.network
quota.network = true
break
if settings.member_host
quota.member_host = true
else
for _,val of users
if val?.upgrades?.member_host
quota.member_host = true
break
if settings.privileged
quota.privileged = true
if settings.disk_quota
quota.disk_quota = to_int(settings.disk_quota)
for _, val of users
quota.disk_quota += to_int(val?.upgrades?.disk_quota)
if settings.memory
quota.memory_limit = to_int(settings.memory)
for _, val of users
quota.memory_limit += to_int(val?.upgrades?.memory)
if settings.memory_request
quota.memory_request = Math.max(MEMORY_REQUEST_MIN, to_int(settings.memory_request))
for _, val of users
quota.memory_request += to_int(val?.upgrades?.memory_request)
if settings.cores
quota.cpu_limit = to_float(settings.cores)
for _, val of users
quota.cpu_limit += to_float(val?.upgrades?.cores)
if settings.cpu_shares
quota.cpu_request = Math.max(0, to_int(settings.cpu_shares) - 256) / 1024
for _, val of users
quota.cpu_request += to_int(val?.upgrades?.cpu_shares) / 1024
return quota
to_int = (s) ->
try
n = parseInt(s)
if isNaN(n)
return 0
else
return n
catch
return 0
to_float = (s) ->
try
x = parseFloat(s)
if isNaN(x)
return 0
else
return x
catch
return 0