Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
160
Issues
160
List
Board
Labels
Milestones
Merge Requests
14
Merge Requests
14
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
haskell-gargantext
Commits
ca339d93
Verified
Commit
ca339d93
authored
May 09, 2024
by
Przemyslaw Kaminski
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[websockets] some stub datatypes
parent
b24d81e7
Pipeline
#6050
failed with stages
in 54 minutes and 6 seconds
Changes
6
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
116 additions
and
3 deletions
+116
-3
gargantext.cabal
gargantext.cabal
+3
-0
WebSockets.hs
src/Gargantext/API/WebSockets.hs
+34
-0
AsyncUpdates.hs
src/Gargantext/Core/AsyncUpdates.hs
+76
-0
Types.hs
src/Gargantext/Core/Types.hs
+1
-1
Main.hs
src/Gargantext/Core/Types/Main.hs
+1
-1
Node.hs
src/Gargantext/Database/Admin/Types/Node.hs
+1
-1
No files found.
gargantext.cabal
View file @
ca339d93
...
...
@@ -137,7 +137,9 @@ library
Gargantext.API.Node.Update
Gargantext.API.Prelude
Gargantext.API.Routes
Gargantext.API.WebSockets
Gargantext.Core
Gargantext.Core.AsyncUpdates
Gargantext.Core.Mail.Types
Gargantext.Core.Methods.Similarities
Gargantext.Core.Methods.Similarities.Conditional
...
...
@@ -603,6 +605,7 @@ library
, servant-server >= 0.18.3 && < 0.20
, servant-swagger ^>= 1.1.10
, servant-swagger-ui ^>= 0.3.5.3.5.0
, servant-websockets >= 2.0.0 && < 2.1
, servant-xml-conduit >= 0.1.0.4
, simple-reflect ^>= 0.3.3
, singletons ^>= 2.7
...
...
src/Gargantext/API/WebSockets.hs
0 → 100644
View file @
ca339d93
{-|
Module : Gargantext.API.WebSockets
Description : WebSockets API
Copyright : (c) CNRS, 2024-Present
License : AGPL + CECILL v3
Maintainer : team@gargantext.org
Stability : experimental
Portability : POSIX
-}
{-# LANGUAGE TypeOperators #-}
module
Gargantext.API.WebSockets
where
import
Data.Text
(
pack
)
import
Network.WebSockets
(
PendingConnection
,
acceptRequest
,
sendTextData
,
withPingThread
)
import
Protolude
import
Servant
import
Servant.API.WebSocket
qualified
as
WS
type
API
=
"ws"
:>
WS
.
WebSocketPending
server
::
Server
API
server
=
streamData
where
streamData
::
MonadIO
m
=>
PendingConnection
->
m
()
streamData
pc
=
do
c
<-
liftIO
$
acceptRequest
pc
liftIO
$
withPingThread
c
10
(
pure
()
)
$
do
forM_
[
1
..
]
$
\
i
->
do
sendTextData
c
(
pack
$
show
(
i
::
Int
))
>>
threadDelay
(
1
*
ms
)
ms
=
1000000
src/Gargantext/Core/AsyncUpdates.hs
0 → 100644
View file @
ca339d93
{-|
Module : Gargantext.Core.AsyncUpdates
Description : Asynchronous updates to the frontend
Copyright : (c) CNRS, 2024-Present
License : AGPL + CECILL v3
Maintainer : team@gargantext.org
Stability : experimental
Portability : POSIX
-}
module
Gargantext.Core.AsyncUpdates
where
import
Gargantext.Core.Types
(
NodeId
,
UserId
)
import
Protolude
{-
I imagine the workflow as follows:
- somewhere in the code (or in the async job worker) we decide to send
an update message to all interested users
- such an action (UserAction) can be associated with the triggering
user (but doesn't have to be)
- we compute interested users for given notification
- we broadcast (using our broker) these notifications to all
interested users
- the broadcast message is either simple (meaning: hey, we have new
data, if you want you can send an update request) or we could send
the changed data already
-}
-- | Various update actions
data
UpdateAction
=
-- | Update given Servant Job (we currently send a request every second to get job status)
-- UpdateJob JobID
-- | Given parent node id, trigger update of the node and its
-- children (e.g. list is automatically created in a corpus)
UpdateTree
NodeId
deriving
(
Eq
,
Show
)
data
UserSource
=
USUser
UserId
|
USSystem
deriving
(
Eq
,
Show
)
-- | Action possibly associated with user who triggered it (there can
-- be system actions as well)
data
UserAction
=
UserAction
UserSource
UpdateAction
deriving
(
Eq
,
Show
)
-- | Represents a notification that goes to a given user. This is
-- directly sent via WebSockets.
data
UserNotification
=
UserNotification
UserId
UserAction
deriving
(
Eq
,
Show
)
-- | What we want now is, given a UserAction action, generate all
-- interested users to which the notification will be sent.
-- This function lives in a monad because we have to fetch users
-- from DB.
notificationsForUserAction
::
UserAction
->
m
[
UserNotification
]
notificationsForUserAction
=
undefined
-- | Stores connection type associated with given user.
-- We probably should set conn = Servant.API.WebSocket.Connection
data
ConnectedUser
conn
=
ConnectedUser
UserId
conn
-- | Given a UserNotification and all connected users, send it to
-- interested ones.
sendNotification
::
UserNotification
->
[
ConnectedUser
conn
]
->
m
()
sendNotification
=
undefined
src/Gargantext/Core/Types.hs
View file @
ca339d93
...
...
@@ -14,8 +14,8 @@ commentary with @some markup@.
{-# OPTIONS_GHC -fno-warn-deprecations #-}
------------------------------------------------------------------------
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE TemplateHaskell #-}
module
Gargantext.Core.Types
(
module
Gargantext
.
Core
.
Types
.
Main
,
module
Gargantext
.
Database
.
Admin
.
Types
.
Node
...
...
src/Gargantext/Core/Types/Main.hs
View file @
ca339d93
...
...
@@ -19,6 +19,7 @@ module Gargantext.Core.Types.Main where
------------------------------------------------------------------------
import
Data.Bimap
(
Bimap
)
import
Data.Bimap
qualified
as
Bimap
import
Data.Swagger
(
ToSchema
(
..
),
ToParamSchema
,
genericDeclareNamedSchema
)
import
Data.Text
(
unpack
,
pack
)
import
Data.TreeDiff
...
...
@@ -29,7 +30,6 @@ import Gargantext.Prelude
import
Servant.API
(
FromHttpApiData
(
..
),
ToHttpApiData
(
..
))
import
Test.QuickCheck
(
elements
)
import
Test.QuickCheck.Arbitrary
(
Arbitrary
,
arbitrary
)
import
qualified
Data.Bimap
as
Bimap
type
CorpusName
=
Text
------------------------------------------------------------------------
...
...
src/Gargantext/Database/Admin/Types/Node.hs
View file @
ca339d93
...
...
@@ -49,7 +49,7 @@ import Opaleye qualified as O
import
Prelude
qualified
import
Servant
hiding
(
Context
)
import
Test.QuickCheck
(
elements
,
Positive
(
getPositive
))
import
Test.QuickCheck.Arbitrary
(
Arbitrary
(
arbitrary
),
arbitraryBoundedEnum
)
import
Test.QuickCheck.Arbitrary
(
Arbitrary
(
arbitrary
),
arbitraryBoundedEnum
)
import
Test.QuickCheck.Instances.Text
()
import
Test.QuickCheck.Instances.Time
()
import
Text.Read
(
read
)
...
...
Przemyslaw Kaminski
@cgenie
mentioned in commit
5660aec0
·
Oct 08, 2024
mentioned in commit
5660aec0
mentioned in commit 5660aec07ec5a0a0a5468f440092c1a8f57a864e
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment