2 changed files with 108 additions and 0 deletions
@ -0,0 +1,42 @@ |
|||||
|
use "files" |
||||
|
use "glob" |
||||
|
|
||||
|
class ProcessHandler |
||||
|
let env : Env |
||||
|
|
||||
|
new ref create(env' : Env) => |
||||
|
env = env' |
||||
|
|
||||
|
fun apply(path : FilePath, |
||||
|
entries' : Array[String] ref) => |
||||
|
this.env.out.write(path.path + "\n") |
||||
|
match OpenFile(path) |
||||
|
| let file: File => |
||||
|
while file.errno() is FileOK do |
||||
|
this.env.out.write(file.read(1024)) |
||||
|
end |
||||
|
else |
||||
|
None |
||||
|
end |
||||
|
|
||||
|
class ProcessStatus |
||||
|
fun getProcesses(cap : AmbientAuth, env : Env) => |
||||
|
let glob = Glob.create() |
||||
|
|
||||
|
try |
||||
|
let proc_dir = FilePath(cap, "/proc")? |
||||
|
|
||||
|
glob.iglob(proc_dir, "[1-9][0-9]*/stat", ProcessHandler.create(env)) |
||||
|
else |
||||
|
None |
||||
|
end |
||||
|
None |
||||
|
|
||||
|
actor Main |
||||
|
new create(env : Env) => |
||||
|
let procstat = ProcessStatus.create() |
||||
|
try |
||||
|
procstat.getProcesses(env.root as AmbientAuth, env) |
||||
|
else |
||||
|
None |
||||
|
end |
@ -0,0 +1,66 @@ |
|||||
|
use "itertools" |
||||
|
use "files" |
||||
|
|
||||
|
class ProcessHandler |
||||
|
let env : Env |
||||
|
|
||||
|
new ref create(env' : Env) => |
||||
|
env = env' |
||||
|
|
||||
|
fun isNumeric(st : String) : Bool => |
||||
|
try |
||||
|
if st.at_offset(0)? == 48 then |
||||
|
return false |
||||
|
end |
||||
|
end |
||||
|
Iter[U8](st.values()).all({ (c) => (c >= 48) and (c <= 57) }) |
||||
|
|
||||
|
fun apply(path : FilePath, entries : Array[String] ref) => |
||||
|
let new_entries : Array[String] ref = entries.clone() |
||||
|
let i : USize = 0 |
||||
|
for f in new_entries.values() do |
||||
|
if not isNumeric(f) then |
||||
|
try |
||||
|
entries.delete(i)? |
||||
|
else |
||||
|
None |
||||
|
end |
||||
|
end |
||||
|
i.add(1) |
||||
|
end |
||||
|
|
||||
|
if path.path == "/proc" then |
||||
|
return None |
||||
|
end |
||||
|
|
||||
|
try |
||||
|
let status = path.join("stat")? |
||||
|
this.env.out.write(path.path + "\n") |
||||
|
match OpenFile(status) |
||||
|
| let file: File => |
||||
|
while file.errno() is FileOK do |
||||
|
this.env.out.write(file.read(1024)) |
||||
|
end |
||||
|
else |
||||
|
None |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
class ProcessStatus |
||||
|
fun getProcesses(cap : AmbientAuth, env : Env) => |
||||
|
try |
||||
|
let proc_dir = FilePath(cap, "/proc")? |
||||
|
proc_dir.walk(ProcessHandler.create(env)) |
||||
|
else |
||||
|
None |
||||
|
end |
||||
|
None |
||||
|
|
||||
|
actor Main |
||||
|
new create(env : Env) => |
||||
|
let test = ProcessStatus.create() |
||||
|
try |
||||
|
test.getProcesses(env.root as AmbientAuth, env) |
||||
|
else |
||||
|
None |
||||
|
end |
Loading…
Reference in new issue