История изменений
Исправление ugoday, (текущая версия) :
Меж тем аккурат под католическое рождество вышел libre-classic-ng 0.0.1
, форк полулярного free-classic-ng
, в котором были решены две главные проблемы оригиналы:
- Нот инвентед хере (да её и на перле!)
- Ужасные ошибки округления
Собственно, сама программа:
#!/usr/bin/guile \
-e main -s
!#
(use-modules (ice-9 rdelim))
(use-modules (ice-9 format))
(define db "/proc/meminfo")
(define factors '((kb . 0)
(Mb . 10)
(Gb . 20)
(Tb . 30)))
(define (parse-meminfo line)
(filter
(lambda (s)
(not (string-null? s)))
(string-split line #\Space)))
(define (add-line new-line acc)
(let* ((key-value (parse-meminfo new-line))
(key (car key-value))
(value-in-kb (string->number (cadr key-value))))
(acons key value-in-kb acc)))
(define (file->mem-info . arg)
(let ((acc (if (eq? '() arg) arg (car arg)))
(new-line (read-line)))
(if (eof-object? new-line) acc
(file->mem-info (add-line new-line acc)))))
(define (read-mem-info db)
(with-input-from-file db
file->mem-info))
(define (get mem-info key factor)
(/ (assoc-ref mem-info key)
(expt 2 (assq-ref factors factor))))
(define (print-statistics mem-info factor)
(let* ((total (get mem-info "MemTotal:" factor))
(free (get mem-info "MemFree:" factor))
(cached (get mem-info "Cached:" factor))
(buffers (get mem-info "Buffers:" factor))
(used (- total free cached buffers)))
(format #t "Memory Total ~s ~s~%" total factor )
(format #t "Memory Used: ~s ~s~%" used factor)
(format #t "Memory Free: ~s ~s~%" free factor)
(format #t "Memory Cached: ~s ~s~%" cached factor)
(format #t "Memory Buffer: ~s ~s~%" buffers factor)))
(define (pick-factor-from . args)
(cond
((= 1 (length args)) 'Gb)
((string= arg "-k") 'kb)
((string= arg "-m") 'Mb)
((string= arg "-t") 'Tb)
(else 'Gb)))
(define (main args)
(let ((factor (pick-factor-from args))
(mem-info (read-mem-info db)))
(print-statistics mem-info factor)))
Пример использования:
./libre.scm -g
Memory Total 3061475/65536 Gb
Memory Used: 7467491/262144 Gb
Memory Free: 142543/131072 Gb
Memory Cached: 1895025/131072 Gb
Memory Buffer: 703273/262144 Gb
Как видите, показатели памяти выражены приятными глазу рациональными числами и при этом они абсолютно точны. Можно начинать радоваться. Много не пейте!
Исправление ugoday, :
Меж тем аккурат под католическое рождество вышел libre-classic-ng 0.0.1
, форк полулярного free-classic-ng
, в котором были решены две главные проблемы оригиналы:
- Нот инвентед хере (да её и на перле!)
- Ужасные ошибки округления
Собственно, сама программа:
#!/usr/bin/guile \
-e main -s
!#
(use-modules (ice-9 rdelim))
(use-modules (ice-9 format))
(define db "/proc/meminfo")
(define factors '((kb . 0)
(Mb . 10)
(Gb . 20)
(Tb . 30)))
(define (parse-meminfo line)
(filter
(lambda (s)
(not (string-null? s)))
(string-split line #\Space)))
(define (add-line new-line acc)
(let* ((key-value (parse-meminfo new-line))
(key (car key-value))
(value-in-kb (string->number (cadr key-value))))
(acons key value-in-kb acc)))
(define (file->mem-info . arg)
(let ((acc (if (eq? '() arg) arg (car arg)))
(new-line (read-line)))
(if (eof-object? new-line) acc
(file->mem-info (add-line new-line acc)))))
(define (read-mem-info db)
(with-input-from-file db
file->mem-info))
(define (get mem-info key factor)
(/ (assoc-ref mem-info key)
(expt 2 (assq-ref factors factor))))
(define (print-statistics mem-info factor)
(let* ((total (get mem-info "MemTotal:" factor))
(free (get mem-info "MemFree:" factor))
(cached (get mem-info "Cached:" factor))
(buffers (get mem-info "Buffers:" factor))
(used (- total free cached buffers)))
(format #t "Memory Total ~s ~s~%" total factor )
(format #t "Memory Used: ~s ~s~%" used factor)
(format #t "Memory Free: ~s ~s~%" free factor)
(format #t "Memory Cached: ~s ~s~%" cached factor)
(format #t "Memory Buffer: ~s ~s~%" buffers factor)))
(define (pick-factor-from . args)
(cond
((= 1 (length args)) 'Gb)
((string= arg "-k") 'kb)
((string= arg "-m") 'Mb)
((string= arg "-t") 'Tb)
(else 'Gb)))
(define (main args)
(let ((factor (pick-factor-from args))
(mem-info (read-mem-info db)))
(print-statistics mem-info factor)))
Пример использования:
./libre.scm -g suite-saas-dev-eu
Memory Total 3061475/65536 Gb
Memory Used: 7467491/262144 Gb
Memory Free: 142543/131072 Gb
Memory Cached: 1895025/131072 Gb
Memory Buffer: 703273/262144 Gb
Как видите, показатели памяти выражены приятными глазу рациональными числами и при этом они абсолютно точны. Можно начинать радоваться. Много не пейте!
Исходная версия ugoday, :
Меж тем аккурат под католическое рождество вышел libre-classic-ng 0.0.1
, форк полулярного free-classic-ng
, в котором были решены две главные проблемы оригиналы:
- Нот инвентед хере (да её и на перле!)
- Ужасные ошибки округления
Собственно, сама программа:
#!/usr/bin/guile \
-e main -s
!#
(use-modules (ice-9 rdelim))
(use-modules (ice-9 format))
(define db "/proc/meminfo")
(define factors '((kb . 0)
(Mb . 10)
(Gb . 20)
(Tb . 30)))
(define (parse-meminfo line)
(filter
(lambda (s)
(not (string-null? s)))
(string-split line #\Space)))
(define (add-line new-line acc)
(let* ((key-value (parse-meminfo new-line))
(key (car key-value))
(value-in-kb (string->number (cadr key-value))))
(acons key value-in-kb acc)))
(define (file->mem-info . arg)
(let ((acc (if (eq? '() arg) arg (car arg)))
(new-line (read-line)))
(if (eof-object? new-line) acc
(file->mem-info (add-line new-line acc)))))
(define (read-mem-info db)
(with-input-from-file db
file->mem-info))
(define (get mem-info key factor)
(/ (assoc-ref mem-info key)
(expt 2 (assq-ref factors factor))))
(define (print-statistics mem-info factor)
(let* ((total (get mem-info "MemTotal:" factor))
(free (get mem-info "MemFree:" factor))
(cached (get mem-info "Cached:" factor))
(buffers (get mem-info "Buffers:" factor))
(used (- total free cached buffers)))
(format #t "Memory Total ~s ~s~%" total factor )
(format #t "Memory Used: ~s ~s~%" used factor)
(format #t "Memory Free: ~s ~s~%" free factor)
(format #t "Memory Cached: ~s ~s~%" cached factor)
(format #t "Memory Buffer: ~s ~s~%" buffers factor)))
(define (pick-factor-from . args)
(cond
((= 1 (length args)) 'Gb)
((string= arg "-k") 'kb)
((string= arg "-m") 'Mb)
((string= arg "-t") 'Tb)
(else 'Gb)))
(define (main args)
(let ((factor (pick-factor-from args))
(mem-info (read-mem-info db)))
(print-statistics mem-info factor)))
Пример использования:
Memory Total 3061475/65536 Gb
Memory Used: 7467491/262144 Gb
Memory Free: 142543/131072 Gb
Memory Cached: 1895025/131072 Gb
Memory Buffer: 703273/262144 Gb
Как видите, показатели памяти выражены приятными глазу рациональными числами и при этом они абсолютно точны. Можно начинать радоваться. Много не пейте!