Overview
Comment: | fixed a couple bugs in common:get-least-loaded-host |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
4b3bf0b62b388077c1c2756aefd6b39c |
User & Date: | bjbarcla on 2016-12-13 17:17:06 |
Other Links: | manifest | tags |
Context
2017-02-09
| ||
21:02 | Merged v1.63 to trunk check-in: 31e9f07df0 user: matt tags: trunk | |
2016-12-14
| ||
15:28 | merged work done on trunk accidentally check-in: 327a91c7af user: bjbarcla tags: v1.63 | |
2016-12-13
| ||
18:01 | Automated merge of trunk/4b3bf0b62b/integ into integ-home check-in: b5b44bddc1 user: matt tags: integ-home | |
17:17 | fixed a couple bugs in common:get-least-loaded-host check-in: 4b3bf0b62b user: bjbarcla tags: trunk | |
2016-12-12
| ||
14:11 | Added info to docs re. scriptinc. check-in: 36aa2d76fe user: mrwellan tags: trunk | |
Changes
Modified common.scm from [0f56c7d848] to [7404179285].
︙ | ︙ | |||
1141 1142 1143 1144 1145 1146 1147 | (define (common:unix-ping hostname) (let ((res (system (conc "ping -c 1 " hostname " > /dev/null")))) (eq? res 0))) ;; ideally put all this info into the db, no need to preserve it across moving homehost ;; | | > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 | (define (common:unix-ping hostname) (let ((res (system (conc "ping -c 1 " hostname " > /dev/null")))) (eq? res 0))) ;; ideally put all this info into the db, no need to preserve it across moving homehost ;; (define (common:get-least-loaded-host hosts-raw) (let* ((hosts (filter (lambda (x) (string-match (regexp "^\\S+$") x)) hosts-raw))) (if (null? hosts) #f ;; ;; stategy: ;; sort by last-used and normalized-load ;; if last-updated > 15 seconds then re-update ;; take the host with the lowest load with the lowest last-used (i.e. not used for longest time) ;; (let ((best-host #f) (curr-time (current-seconds))) (for-each (lambda (hostname) (let* ((rec (let ((h (hash-table-ref/default *host-loads* hostname #f))) (if h h (let ((h (make-host))) (hash-table-set! *host-loads* hostname h) h)))) ;; if host hasn't been pinged in 15 sec update it's data (ping-good (if (< (- curr-time (host-last-update rec)) 15) (host-reachable rec) (or (host-reachable rec) (begin (host-reachable-set! rec (common:unix-ping hostname)) (host-last-update-set! rec curr-time) (host-last-cpuload-set! rec (common:get-normalized-cpu-load hostname)) (host-reachable rec)))))) (cond ((not best-host) (set! best-host hostname)) ((and ping-good (< (alist-ref 'adj-core-load (host-last-cpuload rec)) (alist-ref 'adj-core-load (host-last-cpuload (hash-table-ref *host-loads* best-host))))) (set! best-host hostname))))) hosts) best-host)))) (define (common:wait-for-cpuload maxload numcpus waitdelay #!key (count 1000) (msg #f)(remote-host #f)) (let* ((loadavg (common:get-cpu-load remote-host)) (first (car loadavg)) (next (cadr loadavg)) (adjload (* maxload numcpus)) (loadjmp (- first next))) |
︙ | ︙ |