Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for KuCalc : devops.
Download
50640 views
1
misc = require('smc-util/misc')
2
3
exports.quota = (settings, users) ->
4
# so can assume defined below
5
settings ?= {}
6
users ?= {}
7
8
quota =
9
network : false
10
member_host : false
11
disk_quota : 3000
12
memory_limit : 1000 # default upper bound on RAM in MB
13
memory_request : 100 # default guaranteed RAM in MB
14
cpu_limit : 1 # default upper bound on cpu
15
cpu_request : 0 # default guaranteed min cpu
16
privileged : false # for elevated docker privileges (FUSE mounting, later more)
17
18
# network access
19
if settings.network # free admin-set
20
quota.network = true
21
else # paid by some user
22
for _,val of users
23
if val?.upgrades?.network
24
quota.network = true
25
break
26
27
# member hosting, which translates to "not pre-emptible"
28
if settings.member_host # free admin-set
29
quota.member_host = true
30
else # paid by some user
31
for _,val of users
32
if val?.upgrades?.member_host
33
quota.member_host = true
34
break
35
36
# elevated quota for docker container (fuse mounting and maybe more ...)
37
if settings.privileged
38
quota.privileged = true
39
# user-upgrades are disabled on purpose (security concerns and not implemented)!
40
#else
41
# for _, val of users
42
# if val?.upgrades?.privileged
43
# quota.privileged = true
44
# break
45
46
# disk space quota in MB
47
if settings.disk_quota
48
quota.disk_quota = to_int(settings.disk_quota)
49
for _, val of users
50
quota.disk_quota += to_int(val?.upgrades?.disk_quota)
51
52
# memory limit
53
if settings.memory
54
quota.memory_limit = to_int(settings.memory)
55
for _, val of users
56
quota.memory_limit += to_int(val?.upgrades?.memory)
57
58
# memory request
59
if settings.memory_request
60
quota.memory_request = Math.max(MEMORY_REQUEST_MIN, to_int(settings.memory_request))
61
for _, val of users
62
quota.memory_request += to_int(val?.upgrades?.memory_request)
63
64
# cpu limits
65
if settings.cores
66
quota.cpu_limit = to_float(settings.cores)
67
for _, val of users
68
quota.cpu_limit += to_float(val?.upgrades?.cores)
69
70
# cpu requests
71
if settings.cpu_shares
72
# Subtract 256 since that's what we used to set in the database manually.
73
# This isn't part of anything users pay for.
74
# We should probably zero this out in the db when switching.
75
quota.cpu_request = Math.max(0, to_int(settings.cpu_shares) - 256) / 1024
76
for _, val of users
77
quota.cpu_request += to_int(val?.upgrades?.cpu_shares) / 1024
78
79
return quota
80
81
82
to_int = (s) ->
83
try
84
n = parseInt(s)
85
if isNaN(n)
86
return 0
87
else
88
return n
89
catch
90
return 0
91
92
to_float = (s) ->
93
try
94
x = parseFloat(s)
95
if isNaN(x)
96
return 0
97
else
98
return x
99
catch
100
return 0
101
102
103