Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Q
qbar
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
jktr
qbar
Commits
c0e24ed3
Commit
c0e24ed3
authored
4 years ago
by
Mr. Snow Ball / projects
Browse files
Options
Downloads
Patches
Plain Diff
Don't use fixed monad in Qubes.AdminAPI
parent
f9e51bd8
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/QBar/Qubes/AdminAPI.hs
+16
-9
16 additions, 9 deletions
src/QBar/Qubes/AdminAPI.hs
with
16 additions
and
9 deletions
src/QBar/Qubes/AdminAPI.hs
+
16
−
9
View file @
c0e24ed3
...
...
@@ -97,12 +97,13 @@ qubesAdminCall serviceName args = qubesTryAdminCall serviceName args >>= get whe
get
x
@
Exception
{}
=
fail
$
"service has returned an exception: "
<>
show
x
get
Event
{}
=
fail
"service has returned events instead of a reply"
qubesAdminCallP
::
BL
.
ByteString
->
[
BL
.
ByteString
]
->
Producer
QubesAdminReturn
(
P
.
SafeT
IO
)
()
qubesAdminCallP
::
forall
m
.
(
P
.
MonadSafe
m
,
MonadIO
m
,
MonadFail
m
)
=>
BL
.
ByteString
->
[
BL
.
ByteString
]
->
Producer
QubesAdminReturn
m
()
qubesAdminCallP
serviceName
args
=
do
process
<-
liftIO
$
qubesAdminConnect
serviceName
args
let
stdout
=
getStdout
process
liftIO
$
hSetBinaryMode
stdout
True
let
go
::
Decoder
QubesAdminReturn
->
Producer
QubesAdminReturn
(
P
.
SafeT
IO
)
()
let
go
::
Decoder
QubesAdminReturn
->
Producer
QubesAdminReturn
m
()
go
=
\
case
Done
remainder
_
value
->
do
yield
value
...
...
@@ -119,22 +120,25 @@ qubesAdminCallP serviceName args = do
go
(
runGetIncremental
get
)
`
P
.
finally
`
stopProcess
process
qubesAdminEvents
::
BL
.
ByteString
->
[
BL
.
ByteString
]
->
Producer
QubesAdminReturn
(
P
.
SafeT
IO
)
()
qubesAdminEvents
::
forall
m
.
(
P
.
MonadSafe
m
,
MonadIO
m
,
MonadFail
m
)
=>
BL
.
ByteString
->
[
BL
.
ByteString
]
->
Producer
QubesAdminReturn
m
()
qubesAdminEvents
serviceName
args
=
qubesAdminCallP
serviceName
args
>->
onlyEvents
where
onlyEvents
::
Pipe
QubesAdminReturn
QubesAdminReturn
(
P
.
SafeT
IO
)
()
onlyEvents
::
Pipe
QubesAdminReturn
QubesAdminReturn
m
()
onlyEvents
=
forever
$
await
>>=
\
reply
->
case
reply
of
Ok
{}
->
fail
"service has returned OK instead of events"
Exception
{}
->
fail
$
"service has returned an exception: "
++
show
reply
Event
{}
->
yield
reply
qubesVMStatsRaw
::
Producer
QubesAdminReturn
(
P
.
SafeT
IO
)
()
qubesVMStatsRaw
::
forall
m
.
(
P
.
MonadSafe
m
,
MonadIO
m
,
MonadFail
m
)
=>
Producer
QubesAdminReturn
m
()
qubesVMStatsRaw
=
qubesAdminEvents
"admin.vm.Stats"
[]
data
QubesVMStats
=
QubesVMStats
{
statsVMName
::
BL
.
ByteString
,
memoryKB
::
Int
,
cpuTime
::
Int
,
cpuUsageRaw
::
Int
,
cpuUsage
::
Int
}
deriving
(
Eq
,
Ord
,
Show
,
Read
)
qubesVMStats
::
Producer
QubesVMStats
(
P
.
SafeT
IO
)
()
qubesVMStats
::
forall
m
.
(
P
.
MonadSafe
m
,
MonadIO
m
,
MonadFail
m
)
=>
Producer
QubesVMStats
m
()
qubesVMStats
=
qubesVMStatsRaw
>->
P
.
mapFoldable
parse
where
parse
::
QubesAdminReturn
->
Maybe
QubesVMStats
parse
Event
{
evSubject
,
evEvent
,
evProperties
}
...
...
@@ -167,10 +171,12 @@ data QubesEvent
|
PropertyDel
{
domainName
::
BL
.
ByteString
,
changedProperty
::
BL
.
ByteString
,
oldValue
::
BL
.
ByteString
}
-- reset to default value
deriving
(
Eq
,
Ord
,
Show
,
Read
)
qubesEventsRaw
::
Producer
QubesAdminReturn
(
P
.
SafeT
IO
)
()
qubesEventsRaw
::
forall
m
.
(
P
.
MonadSafe
m
,
MonadIO
m
,
MonadFail
m
)
=>
Producer
QubesAdminReturn
m
()
qubesEventsRaw
=
qubesAdminEvents
"admin.Events"
[]
qubesEvents
::
Producer
QubesEvent
(
P
.
SafeT
IO
)
()
qubesEvents
::
forall
m
.
(
P
.
MonadSafe
m
,
MonadIO
m
,
MonadFail
m
)
=>
Producer
QubesEvent
m
()
qubesEvents
=
qubesEventsRaw
>->
P
.
mapFoldable
parse
where
parse
::
QubesAdminReturn
->
Maybe
QubesEvent
parse
Event
{
evEvent
=
"connection-established"
}
=
Nothing
...
...
@@ -313,7 +319,8 @@ qubesListLabels = qubesListLabelNames >>= mapM (toSndM qubesGetLabelColor)
toSndM
::
Applicative
m
=>
(
a
->
m
b
)
->
a
->
m
(
a
,
b
)
toSndM
f
x
=
sequenceA
(
x
,
f
x
)
qubesMonitorProperty
::
Producer
QubesEvent
(
P
.
SafeT
IO
)
()
->
BL
.
ByteString
->
Producer
QubesPropertyInfo
(
P
.
SafeT
IO
)
()
qubesMonitorProperty
::
forall
m
.
(
P
.
MonadSafe
m
,
MonadIO
m
,
MonadFail
m
)
=>
Producer
QubesEvent
m
()
->
BL
.
ByteString
->
Producer
QubesPropertyInfo
m
()
qubesMonitorProperty
events
name
=
events
>->
P
.
filter
isRelevant
>->
fetchValue
where
fetchValue
=
liftIO
(
qubesGetProperty
name
)
>>=
go
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment