Toujours plus loin dans la parallélisation – les résultats s’affichent instantanément…

This commit is contained in:
bvaudour 2020-07-22 16:35:25 +02:00
parent 541671c38d
commit 0ebaf3b5a0
2 changed files with 142 additions and 9 deletions

View File

@ -1,6 +1,7 @@
#alias:new digall e:dig ANY +noall +answer #alias:new digall e:dig ANY +noall +answer
fn digall [@_args]{ fn digall [@_args]{
use moi/util/list use moi/util/list
use moi/util/strutil
use str use str
local:default_records = [ local:default_records = [
@ -15,6 +16,11 @@ fn digall [@_args]{
NS NS
SOA SOA
] ]
local:cols = [
[&min=24]
[&min=8]
[&min=10]
]
local:records = [] local:records = []
local:servers = [] local:servers = []
local:flags = [ local:flags = [
@ -44,21 +50,32 @@ fn digall [@_args]{
records = $default_records records = $default_records
} }
} }
fn format [results]{
eawk [_ @args]{
put [ $args[0] (all $args[2:]) ]
} $results | list:remove-duplicate | list:sort [l1 l2]{
local:c = (str:compare $l1[0] $l2[0])
if (== $c 0) {
c = (str:compare $l1[2] $l2[2])
}
} | strutil:format &col=$cols | str:join "\n"
}
fn drillr [d @args]{ fn drillr [d @args]{
local:results = [ (peach [r]{ local:results = [ (peach [r]{
e:drill $@args $r $d | list:filter [e]{ e:drill $@args $r $d | list:filter [e]{
and (> (count $e) 2) (not (is $e[:2] ';;')) and (> (count $e) 2) (not (is $e[:2] ';;'))
} }
} $records | list:remove-duplicate) ] } $records) ]
echo (str:join "\n" $results) format $results
} }
fn digr [d @args]{ fn digr [d @args]{
local:results = [ (peach [r]{ local:results = [ (peach [r]{
e:dig $@args $r $d $@flags e:dig $@args $r $d $@flags
} $records | list:remove-duplicate) ] } $records) ]
echo (str:join "\n" $results) format $results
} }
fn req [d @args]{ fn req [d @args]{
@ -70,21 +87,22 @@ fn digall [@_args]{
} }
fn digs [s d]{ fn digs [s d]{
echo (styled $s bright-yellow) put (echo (styled $s bright-yellow))
req $d $s req $d $s
} }
fn digd [d]{ fn digd [d]{
echo (styled 'Domaine: '$d bright-green) local:results = [ (echo (styled 'Domaine: '$d bright-green)) ]
if (> (count $servers) 0) { if (> (count $servers) 0) {
each [s]{ each [s]{
digs $s $d @results = $@results (digs $s $d)
} $servers } $servers
} else { } else {
req $d @results = $@results (req $d)
} }
echo (str:join "\n" $results)
} }
init init
each $digd~ $domains peach $digd~ $domains
} }

115
lib/moi/util/strutil.elv Normal file
View File

@ -0,0 +1,115 @@
use str
use ./list
fn -repeat [n s]{
repeat $n $s | str:join ''
}
fn left [size s]{
local:ss = (count $s)
local:d = (- $size $ss)
if (<= $d 0) {
put $s[:$size]
} else {
put $s(-repeat $d ' ')
}
}
fn right [size s]{
local:ss = (count $s)
local:d = (- $size $ss)
if (<= $d 0) {
put $s[:$size]
} else {
put (-repeat $d ' ')$s
}
}
fn center [size s]{
use math
local:ss = (count $s)
local:d = (- $size $ss)
if (<= $d 0) {
local:l = (math:ceil (/ -$d 2))
local:r = (- (+ $ss $d) $l)
put $s[$l':'$r]
} else {
local:l = (math:ceil (/ $d 2))
local:r = (- $d $l)
put (-repeat $l ' ')$s(-repeat $r ' ')
}
}
fn -c2map [col]{
if (not-eq (kind-of $col) list) {
put []
return
}
list:loop [i c]{
local:k = (kind-of $c)
local:cf = [&min=0]
if (is $k string) {
cf[min] = $c
} elif (is $k map) {
if (has-key $c min) {
cf[min] = $c[min]
}
if (has-key $c align) {
cf[align] = $c[align]
}
}
col[$i] = $cf
} $col
put $col
}
fn -parsecols [col &split=$false lst]{
col = (-c2map $col)
local:cc = (count $col)
local:lines = $lst
if $split {
lines = [ (eawk [_ @args]{ put $args } $lst) ]
}
each [l]{
local:cl = (count $l)
if (> $cl $cc) {
col = [ $@col (range (- $cl $cc) | each [_]{ put [&align=left &min=0] }) ]
cc = $cl
}
list:loop [i c]{
local:ccl = (+ (count $c) 1)
if (> $ccl $col[$i][min]) {
col[$i][min] = $ccl
}
} $l
} $lines
put $col
}
fn -format [f e]{
local:cb = $left~
if (has-key $f align) {
local:a = $f[align]
if (is $a right) {
cb = $right~
} elif (is $a center) {
cb = $center~
}
}
$cb $f[min] $e
}
fn -formatline [col line]{
list:loop [i v]{
-format $col[$i] $v
} $line | str:join ''
}
fn format [&col=[] &split=$false @lst]{
local:lines = (list:-p $@lst)
if $split {
lines = [ (eawk [l @args]{ put $args } $lines) ]
}
col = (-parsecols $col $lines)
each [l]{ -formatline $col $l } $lines
}