init
This commit is contained in:
commit
60741a3250
24
COPYING
Normal file
24
COPYING
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
This is free and unencumbered software released into the public domain.
|
||||||
|
|
||||||
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||||
|
distribute this software, either in source code form or as a compiled
|
||||||
|
binary, for any purpose, commercial or non-commercial, and by any
|
||||||
|
means.
|
||||||
|
|
||||||
|
In jurisdictions that recognize copyright laws, the author or authors
|
||||||
|
of this software dedicate any and all copyright interest in the
|
||||||
|
software to the public domain. We make this dedication for the benefit
|
||||||
|
of the public at large and to the detriment of our heirs and
|
||||||
|
successors. We intend this dedication to be an overt act of
|
||||||
|
relinquishment in perpetuity of all present and future rights to this
|
||||||
|
software under copyright law.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
For more information, please refer to <http://unlicense.org/>
|
19
README.md
Normal file
19
README.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# cpufreq
|
||||||
|
|
||||||
|
Display current CPU frequencies from `/proc/cpuinfo`. This is a sample of the Nim language.
|
||||||
|
|
||||||
|
```
|
||||||
|
Usage: cpufreq [-b|--brief] [-t|--table] [-h|--help] [-v|--version]
|
||||||
|
```
|
||||||
|
|
||||||
|
# Build from source
|
||||||
|
|
||||||
|
First install Nim language compiler. See instructions of [Nim site](https://nim-lang.org/install.html).
|
||||||
|
|
||||||
|
Compile programm:
|
||||||
|
|
||||||
|
```
|
||||||
|
nim c cpufreq.nim
|
||||||
|
```
|
||||||
|
|
||||||
|
Done! You can place `cpufreq` executable to your PATH, e.g. `/urs/local/bin`.
|
116
cpufreq.nim
Normal file
116
cpufreq.nim
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
#[
|
||||||
|
cpufreq - display currrent CPU frequencies from /proc/cpuinfo
|
||||||
|
|
||||||
|
This is free and unencumbered software released into the public domain.
|
||||||
|
|
||||||
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||||
|
distribute this software, either in source code form or as a compiled
|
||||||
|
binary, for any purpose, commercial or non-commercial, and by any
|
||||||
|
means.
|
||||||
|
|
||||||
|
In jurisdictions that recognize copyright laws, the author or authors
|
||||||
|
of this software dedicate any and all copyright interest in the
|
||||||
|
software to the public domain. We make this dedication for the benefit
|
||||||
|
of the public at large and to the detriment of our heirs and
|
||||||
|
successors. We intend this dedication to be an overt act of
|
||||||
|
relinquishment in perpetuity of all present and future rights to this
|
||||||
|
software under copyright law.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
For more information, please refer to <http://unlicense.org/>
|
||||||
|
]#
|
||||||
|
|
||||||
|
import std/nre
|
||||||
|
import std/sequtils
|
||||||
|
import std/strutils
|
||||||
|
import std/parseopt
|
||||||
|
|
||||||
|
const Version: string = "0.1.0"
|
||||||
|
const Usage: string ="""
|
||||||
|
Display current CPU frequencies from /proc/cpuinfo
|
||||||
|
|
||||||
|
Usage: cpufreq [-b|--brief] [-t|--table] [-h|--help] [-v|--version]"""
|
||||||
|
|
||||||
|
proc countCPU(CPUInfo: string): int =
|
||||||
|
# Count CPU cores. Return integer value, e.g. 8.
|
||||||
|
var processors = CPUInfo.findAll(re"processor")
|
||||||
|
result = count(processors, "processor")
|
||||||
|
|
||||||
|
proc getModelName(CPUInfo: string): string =
|
||||||
|
# Return processor manufacturer and model name.
|
||||||
|
var model = CPUInfo.find(re"(?<=model name)(.*)").get.captures[-1]
|
||||||
|
result = model.find(re"(?<=: )(.*)").get.captures[-1]
|
||||||
|
|
||||||
|
proc getCPUFreq(CPUInfo: string): seq[string] =
|
||||||
|
# Return sequence of stings with CPU frequencies. For example output:
|
||||||
|
# @["1400.000", "1400.000", "2100.000", "1790.073"]
|
||||||
|
var raw_freqs: seq[string] = CPUInfo.findAll(re"(?<=cpu MHz)(.*)(?i)")
|
||||||
|
var freqs: seq[string] = @[]
|
||||||
|
for freq in raw_freqs:
|
||||||
|
freqs.add(freq.replace("\t\t: ", ""))
|
||||||
|
result = freqs
|
||||||
|
|
||||||
|
iterator countTo(n: int): int =
|
||||||
|
var i = 0
|
||||||
|
while i <= n:
|
||||||
|
yield i
|
||||||
|
inc i
|
||||||
|
|
||||||
|
proc displayFreqsAsList(CPUFreqs: seq[string], CPUs: int) =
|
||||||
|
for cpu in countTo(CPUs - 1):
|
||||||
|
echo "CPU", cpu, ": ", CPUFreqs[cpu]
|
||||||
|
|
||||||
|
proc displayFreqsAsTable(CPUFreqs: seq[string], CPUs: int) =
|
||||||
|
for cpu in countTo(CPUs - 1):
|
||||||
|
stdout.write "CPU", cpu, "\t\t"
|
||||||
|
echo "\n", CPUFreqs.join("\t")
|
||||||
|
|
||||||
|
# Toggles for '--brief' and '--table' options
|
||||||
|
var brief: bool = false
|
||||||
|
var table: bool = false
|
||||||
|
|
||||||
|
# Parse command line options
|
||||||
|
var optparser = initOptParser()
|
||||||
|
while true:
|
||||||
|
optparser.next()
|
||||||
|
case optparser.kind
|
||||||
|
of cmdEnd: break
|
||||||
|
of cmdShortOption, cmdLongOption:
|
||||||
|
case optparser.key
|
||||||
|
of "help", "h": echo Usage; system.quit(0)
|
||||||
|
of "version", "v": echo Version; system.quit(0)
|
||||||
|
of "brief", "b": brief = true
|
||||||
|
of "table", "t": table = true
|
||||||
|
else:
|
||||||
|
echo "Unknown option: ", optparser.key
|
||||||
|
echo Usage
|
||||||
|
system.quit(1)
|
||||||
|
of cmdArgument:
|
||||||
|
discard
|
||||||
|
|
||||||
|
# Read /proc/cpuinfo and display info
|
||||||
|
let CPUInfo = readFile("/proc/cpuinfo")
|
||||||
|
let CPUModel: string = getModelName(CPUInfo)
|
||||||
|
let CPUs: int = countCPU(CPUInfo)
|
||||||
|
let CPUFreqs: seq[string] = getCPUFreq(CPUInfo)
|
||||||
|
|
||||||
|
if brief == false:
|
||||||
|
echo "CPU model: ", CPUModel
|
||||||
|
echo "CPU cores: ", CPUs
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if isEmptyOrWhitespace(CPUFreqs.join) == true:
|
||||||
|
echo "Sorry, frequencies info is not available for your CPU :("
|
||||||
|
system.quit(1)
|
||||||
|
|
||||||
|
if table == false:
|
||||||
|
displayFreqsAsList(CPUFreqs, CPUs)
|
||||||
|
else:
|
||||||
|
displayFreqsAsTable(CPUFreqs, CPUs)
|
Loading…
Reference in New Issue
Block a user