@startuml
User -> System: Select "Choose a Pic"
System --> User: Show gallery of images already on device
User -> System: Choose picture
System --> User: Display generated palettes screen
@enduml
SEQUENCE DIAGRAM
6332878812086272
:ConfigurableClientList:CacheConfig:ZoneTableSegment(Mapped)seg1:MemorySegment(Mapped)seg2:MemorySegment(Mapped):b10-auth:b10-auth:ConfigurableClientList:CacheConfig:ZoneTableSegment(Mapped)seg1:MemorySegment(Mapped)seg2:MemorySegment(Mapped)new/initial config(datasrc cfg)<<construct>>:ConfigurableClientListconfigure(cfg)<<construct>> (cfg):CacheConfig<<construct>>:ZoneTableSegment(Mapped)isWritable()Segment not writablewhen not resetfalsegetStatus()DataSourceStatus[]subscribe tomemmgr groupcommand frommemmgr(datasrc_name,segmentparam)resetMemorySegment(datasrc_name,READ_ONLY,segmentparam)reset(READ_ONLY,segmentparam)<<construct>>seg1:MemorySegment(Mapped)command frommemmgr(datasrc_name,segmentparam)resetMemorySegment(datasrc_name,READ_ONLY,segmentparam)reset(READ_ONLY,segmentparam)<<destroy>><<construct>>seg2:MemorySegment(Mapped)reload(zonename)getCachedZoneWriter(zone_name)isWritable()Segment not writableas it is READ_ONLYfalseCACHE_NOT_WRITABLE
SEQUENCE DIAGRAM
6338674065145856
:ConfigurableClientList:CacheConfig:ZoneTableSegment(Mapped)seg1:MemorySegment(Mapped)seg2:MemorySegment(Mapped):b10-auth:b10-auth:ConfigurableClientList:CacheConfig:ZoneTableSegment(Mapped)seg1:MemorySegment(Mapped)seg2:MemorySegment(Mapped)new/initial config(datasrc cfg)<<construct>>:ConfigurableClientListconfigure(cfg)<<construct>> (cfg):CacheConfig<<construct>>:ZoneTableSegment(Mapped)isWritable()Segment not writablewhen not resetfalsegetStatus()DataSourceStatus[]subscribe tomemmgr groupcommand frommemmgr(datasrc_name,segmentparam)resetMemorySegment(datasrc_name,READ_ONLY,segmentparam)reset(READ_ONLY,segmentparam)<<construct>>seg1:MemorySegment(Mapped)command frommemmgr(datasrc_name,segmentparam)resetMemorySegment(datasrc_name,READ_ONLY,segmentparam)reset(READ_ONLY,segmentparam)<<destroy>><<construct>>seg2:MemorySegment(Mapped)reload(zonename)getCachedZoneWriter(zone_name)isWritable()Segment not writableas it is READ_ONLYfalseCACHE_NOT_WRITABLE
@startuml
participant auth as ":b10-auth"
[-> auth: new/initial config\n(datasrc cfg)
activate auth
participant list as ":Configurable\nClientList"
create list
auth -> list: <<construct>>
auth -> list: configure(cfg)
activate list
participant CacheConfig as ":CacheConfig"
create CacheConfig
list -> CacheConfig: <<construct>> (cfg)
participant zt_segment as ":ZoneTable\nSegment\n(Mapped)"
create zt_segment
list -> zt_segment: <<construct>>
list -> zt_segment: isWritable()
activate zt_segment
note over zt_segment: Segment not writable\nwhen not reset
zt_segment --> list: false
deactivate zt_segment
deactivate list
auth -> list: getStatus()
activate list
list --> auth: DataSourceStatus[]
deactivate list
[<- auth: subscribe to\nmemmgr group
deactivate auth
...
[-> auth: command from\nmemmgr\n(datasrc_name,\nsegmentparam)
activate auth
auth -> list: resetMemorySegment\n(datasrc_name,\nREAD_ONLY,\nsegmentparam)
activate list
list -> zt_segment: reset\n(READ_ONLY,\nsegmentparam)
activate zt_segment
participant segment as "seg1:Memory\nSegment\n(Mapped)"
create segment
zt_segment -> segment: <<construct>>
deactivate zt_segment
deactivate list
deactivate auth
...
[-> auth: command from\nmemmgr\n(datasrc_name,\nsegmentparam)
activate auth
auth -> list: resetMemorySegment\n(datasrc_name,\nREAD_ONLY,\nsegmentparam)
activate list
list -> zt_segment: reset\n(READ_ONLY,\nsegmentparam)
activate zt_segment
zt_segment -> segment: <<destroy>>
destroy segment
participant segment2 as "seg2:Memory\nSegment\n(Mapped)"
create segment2
zt_segment -> segment2: <<construct>>
deactivate zt_segment
deactivate list
deactivate auth
...
[-> auth: reload\n(zonename)
activate auth
auth -> list: getCachedZoneWriter\n(zone_name)
activate list
list -> zt_segment: isWritable()
activate zt_segment
note over zt_segment: Segment not writable\nas it is READ_ONLY
zt_segment --> list: false
deactivate zt_segment
list --> auth: CACHE_NOT_WRITABLE
deactivate list
deactivate auth
@enduml
SEQUENCE DIAGRAM
6338674065145856
FrontendFrontendBackendBackendkPOVMsgClass_RenderControl, kPOVMsgIdent_RenderOptionskPOVMsgClass_RenderControl, kPOVMsgIdent_RenderAllloopkPOVMsgClass_RenderOutputkPOVMsgClass_RenderControl, kPOVMsgIdent_RenderStoploop[more chunks currently being rendered]kPOVMsgClass_RenderOutput(aborted)
SEQUENCE DIAGRAM
6348747374067712
FrontendFrontendBackendBackendkPOVMsgClass_RenderControl, kPOVMsgIdent_RenderOptionskPOVMsgClass_RenderControl, kPOVMsgIdent_RenderAllloopkPOVMsgClass_RenderOutputkPOVMsgClass_RenderControl, kPOVMsgIdent_RenderStoploop[more chunks currently being rendered]kPOVMsgClass_RenderOutput(aborted)
APIHelperAPIHelperUserUserUserProfileUserProfileCreateMealRequestCreateMealRequestYelpSearchYelpSearchYelpAPIYelpAPIFriendsTableFriendsTableSearchFriendSearchFriendFriendProfileFriendProfileGET user_by_idupdate user detaildisplay user updatePOST edit_profiledisplay updated profileclick on "Find Restaurant"search with YelpAPIreturn search resultupdate restaurant nameclick on Friend in tableGET profilereturn friend profile detailclick on friendGET profiledisplay friend profile detail
SEQUENCE DIAGRAM
6363337109536768
APIHelperAPIHelperUserUserUserProfileUserProfileCreateMealRequestCreateMealRequestYelpSearchYelpSearchYelpAPIYelpAPIFriendsTableFriendsTableSearchFriendSearchFriendFriendProfileFriendProfileGET user_by_idupdate user detaildisplay user updatePOST edit_profiledisplay updated profileclick on "Find Restaurant"search with YelpAPIreturn search resultupdate restaurant nameclick on Friend in tableGET profilereturn friend profile detailclick on friendGET profiledisplay friend profile detail
@startuml
participant User
User -> A: DoWork
activate A
A -> B: << createRequest >>
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: RequestCreated
deactivate B
A -> User: Done
deactivate A
@enduml
@startuml
[-> A: DoWork
activate A
A -> A: Internal call
activate A
A ->] : << createRequest >>
A<--] : RequestCreated
deactivate A
[<- A: Done
deactivate A
@enduml
SEQUENCE DIAGRAM
6408443392950272
Users CRUD (Create Read Update Delete)UserUserWebUIWebUIOrchestraOrchestraLoginGET /user/login (auth d@f.com:pass)Get user from MongoDBOK 200{"status"=200 "value"={"_id": "<uuid>", "name": "David Fischer", ...}}'Successfull login'Users Tabloop[every N seconds (AJAX)]GET /user/id/<uuid> (auth d@f.com:pass)Get user from MongoDBOK 200{"status"=200, "value"={"_id": "<uuid>", "name": "David Fischer", ...}}alt[if authenticated user has the admin_platform attribute]GET /user (auth d@f.com:pass)Get users from MongoDBOK 200{"status"=200, "value"=[{"_id": "<uuid>", "name": "David Fischer", ...}, ...]}<< Show/update the user and users list if authenticated user ... >>alt[if authenticated user has the admin_platform attribute]Add an user (with add form)POST /user {"first_name": "Adi", "last_name": "Kouadio", ...} (auth d@f.com:pass)Save user to MongoDBOK 200{"status"=200, "value"={"_id": "<uuid_of_adi>", "name": "Adi Kouadio", ...}}<< Flash info message 'The user "Adi Kouadio" has been added.' >>Edit an userPUT /user/id/<uuid_of_andres> {"admin_platform": false} (auth d@f.com:pass)Update user into MongoDBOK 200{"status"=200, "value"="The user \"Andrés Revuelta\" has been updated."}<< Flash info message 'The user "Andrés Revuelta" has been updated.' >>Remove an userDELETE /user/id/<uuid_of_bram> (auth d@f.com:pass)Remove user from MongoDBOK 200{"status"=200, "value"="The user \"Bram Tullemans\" has been deleted."}<< Flash info message 'The user "Bram Tullemans" has been deleted.' >>
SEQUENCE DIAGRAM
6437871166685184
Users CRUD (Create Read Update Delete)UserUserWebUIWebUIOrchestraOrchestraLoginGET /user/login (auth d@f.com:pass)Get user from MongoDBOK 200{"status"=200 "value"={"_id": "<uuid>", "name": "David Fischer", ...}}'Successfull login'Users Tabloop[every N seconds (AJAX)]GET /user/id/<uuid> (auth d@f.com:pass)Get user from MongoDBOK 200{"status"=200, "value"={"_id": "<uuid>", "name": "David Fischer", ...}}alt[if authenticated user has the admin_platform attribute]GET /user (auth d@f.com:pass)Get users from MongoDBOK 200{"status"=200, "value"=[{"_id": "<uuid>", "name": "David Fischer", ...}, ...]}<< Show/update the user and users list if authenticated user ... >>alt[if authenticated user has the admin_platform attribute]Add an user (with add form)POST /user {"first_name": "Adi", "last_name": "Kouadio", ...} (auth d@f.com:pass)Save user to MongoDBOK 200{"status"=200, "value"={"_id": "<uuid_of_adi>", "name": "Adi Kouadio", ...}}<< Flash info message 'The user "Adi Kouadio" has been added.' >>Edit an userPUT /user/id/<uuid_of_andres> {"admin_platform": false} (auth d@f.com:pass)Update user into MongoDBOK 200{"status"=200, "value"="The user \"Andrés Revuelta\" has been updated."}<< Flash info message 'The user "Andrés Revuelta" has been updated.' >>Remove an userDELETE /user/id/<uuid_of_bram> (auth d@f.com:pass)Remove user from MongoDBOK 200{"status"=200, "value"="The user \"Bram Tullemans\" has been deleted."}<< Flash info message 'The user "Bram Tullemans" has been deleted.' >>
@startuml
skin BlueModern
title Users CRUD (Create Read Update Delete)
actor User
participant "WebUI" as W
participant "Orchestra" as O
'participant "Storage" as S
'participant "Transform" as T
'participant "Publisher" as P
User -> W: Login
activate W
W -> O: GET /user/login (auth d@f.com:pass)
activate O
O -> O: Get user from MongoDB
O --> W: <b>OK 200</b> {"status"=200 "value"={"_id": "<uuid>", "name": "David Fischer", ...}}
deactivate O
W --> User: 'Successfull login'
deactivate W
User -> W: Users Tab
activate W
loop every N seconds (AJAX)
W -> O: GET /user/id/<uuid> (auth d@f.com:pass)
activate O
O -> O: Get user from MongoDB
O --> W: <b>OK 200</b> {"status"=200, "value"={"_id": "<uuid>", "name": "David Fischer", ...}}
deactivate O
alt if authenticated user has the admin_platform attribute
W -> O: GET /user (auth d@f.com:pass)
activate O
O -> O: Get users from MongoDB
O --> W: <b>OK 200</b> {"status"=200, "value"=[{"_id": "<uuid>", "name": "David Fischer", ...}, ...]}
deactivate O
end
W --> User: << Show/update the user and users list if authenticated user ... >>
end
deactivate W
alt if authenticated user has the admin_platform attribute
User -> W: Add an user (with add form)
activate W
W -> O: POST /user {"first_name": "Adi", "last_name": "Kouadio", ...} (auth d@f.com:pass)
activate O
O -> O: Save user to MongoDB
O --> W: <b>OK 200</b> {"status"=200, "value"={"_id": "<uuid_of_adi>", "name": "Adi Kouadio", ...}}
deactivate O
W --> User: << Flash info message 'The user "Adi Kouadio" has been added.' >>
deactivate W
User -> W: Edit an user
activate W
W -> O: PUT /user/id/<uuid_of_andres> {"admin_platform": false} (auth d@f.com:pass)
activate O
O -> O: Update user into MongoDB
O --> W: <b>OK 200</b> {"status"=200, "value"="The user \\"Andrés Revuelta\\" has been updated."}
deactivate O
W --> User: << Flash info message 'The user "Andrés Revuelta" has been updated.' >>
deactivate W
User -> W: Remove an user
activate W
W -> O: DELETE /user/id/<uuid_of_bram> (auth d@f.com:pass)
activate O
O -> O: Remove user from MongoDB
O --> W: <b>OK 200</b> {"status"=200, "value"="The user \\"Bram Tullemans\\" has been deleted."}
deactivate O
W --> User: << Flash info message 'The user "Bram Tullemans" has been deleted.' >>
deactivate W
end
@enduml
DulaniDulaniVirnaVirnaLogLogAuthentication Requestalt[successful case]Authentication Accepted[some kind of failure]Authentication FailureMy own labelLog attack startloop[1000 times]DNS AttackLog attack end[Another type of failure]Please repeat
SEQUENCE DIAGRAM
6451298039758848
DulaniDulaniVirnaVirnaLogLogAuthentication Requestalt[successful case]Authentication Accepted[some kind of failure]Authentication FailureMy own labelLog attack startloop[1000 times]DNS AttackLog attack end[Another type of failure]Please repeat
@startuml
Dulani -> Virna: Authentication Request
alt successful case
Dulani -> Virna: Authentication Accepted
else some kind of failure
Dulani -> Virna: Authentication Failure
group My own label
Virna -> Log : Log attack start
loop 1000 times
Virna -> Dulani: DNS Attack
end
Virna -> Log : Log attack end
end
else Another type of failure
Dulani -> Virna: Please repeat
end
@enduml
@startuml
participant Bob << (C,#ADD1B2) >>
participant Alice << (C,#ADD1B2) >>
Bob->Alice: First message
@enduml
SEQUENCE DIAGRAM
6451807664472064
Source EndpointSink EndpointFile DataMessage«Operator»SourceOp«FileSystem»INotifySource FolderFile EventsData ServiceData ClientSink Foldertell location of SourceFolderstart on SourceFolderregister to changes in SourceFolderpoll for eventsset of eventsloop[for each event]create from eventFile DataMessagecontent and stat of filepath offsetrelative toSourceFolder{FileData}create filefrom {FileData}
SEQUENCE DIAGRAM
6469035449384960
Source EndpointSink EndpointFile DataMessage«Operator»SourceOp«FileSystem»INotifySource FolderFile EventsData ServiceData ClientSink Foldertell location of SourceFolderstart on SourceFolderregister to changes in SourceFolderpoll for eventsset of eventsloop[for each event]create from eventFile DataMessagecontent and stat of filepath offsetrelative toSourceFolder{FileData}create filefrom {FileData}
@startuml
hide footbox
actor SourceOp <<Operator>>
actor INotify <<FileSystem>>
database "Source Folder" as SoF
box "Source Endpoint"
boundary "File Events" as FE
participant "Data Service" as DS
participant "File Data\nMessage" as FD
end box
box "Sink Endpoint"
participant "Data Client" as DC
end box
database "Sink Folder" as SiF
activate DS
activate DC
SourceOp -> DS : tell location of SourceFolder
FE <- DS : start on SourceFolder
activate FE
INotify <- FE : register to changes in SourceFolder
FE <- DS : poll for events
FE --> DS : set of events
activate DS
loop for each event
create FD
DS -> FD : create from event
activate FD
FD -> SoF : content and stat of file
FD <-- SoF
FD -> FD : path offset\nrelative to\nSourceFolder
DS <-- FD
DS -> DC : {FileData}
destroy FD
DC -> SiF : create file\nfrom {FileData}
end
deactivate DS
@enduml
@startuml
box "Internal Service" #LightBlue
participant Bob
participant Alice
end box
participant Other
Bob -> Alice : hello
Alice -> Other : hello
@enduml
SEQUENCE DIAGRAM
6472446458724352
Reciving of messagesSessionConsumerReceiverReceiverSessionInterpreterInterpreterConsumerAppAppreceive(message)create()SessionUse given scheduler to run messagedecoding and interpreting in thread pool.startThread()decode(message)interpret(messageData)decode(messageData)create()ConsumerThe Consumer is actuallypart of the data containerevaluate(data, consumer)Let evaluation run in app threadcall(responseData)Let encoding and sending run in Com schedulerencode(responseData)send(responseMessageData)send(responseMessage)
SEQUENCE DIAGRAM
6474077204119552
Reciving of messagesSessionConsumerReceiverReceiverSessionInterpreterInterpreterConsumerAppAppreceive(message)create()SessionUse given scheduler to run messagedecoding and interpreting in thread pool.startThread()decode(message)interpret(messageData)decode(messageData)create()ConsumerThe Consumer is actuallypart of the data containerevaluate(data, consumer)Let evaluation run in app threadcall(responseData)Let encoding and sending run in Com schedulerencode(responseData)send(responseMessageData)send(responseMessage)
@startuml
title Reciving of messages
participant Receiver
participant Session
participant Interpreter
participant Consumer
participant App
activate Receiver
activate App
[-> Receiver : receive(message)
Receiver -> Session* : create()
activate Session
note over Receiver
Use given scheduler to run message
decoding and interpreting in thread pool.
end note
Receiver -> Receiver : startThread()
activate Receiver
Receiver -> Receiver : decode(message)
Receiver -> Interpreter : interpret(messageData)
deactivate Receiver
activate Interpreter
Interpreter -> Interpreter : decode(messageData)
Interpreter -> Consumer* : create()
note over Consumer #6CC
The Consumer is actually
part of the data container
end note
Interpreter -> App : evaluate(data, consumer)
deactivate Interpreter
activate App
note over App
Let evaluation run in app thread
end note
...
App -> Consumer : call(responseData)
deactivate App
activate Consumer
note over Consumer, Session
Let encoding and sending run in Com scheduler
end note
Consumer -> Interpreter : encode(responseData)
Consumer -> Session : send(responseMessageData)
[<- Session : send(responseMessage)
destroy Consumer
deactivate Session
@enduml
SEQUENCE DIAGRAM
6474077204119552
ResellerTransact 24Card HolderCard HolderMerchantMerchantAcquiringAcquiringCard DirectorCard DirectorTPSTPSCard AccountCard AccountMerchant AccountMerchant AccountReseller AccountReseller Account1Pay for something2Transfer some moneyfrom card_holder to me3Check if
SEQUENCE DIAGRAM
6479411553501184
ResellerTransact 24Card HolderCard HolderMerchantMerchantAcquiringAcquiringCard DirectorCard DirectorTPSTPSCard AccountCard AccountMerchant AccountMerchant AccountReseller AccountReseller Account1Pay for something2Transfer some moneyfrom card_holder to me3Check if
@startuml
autonumber
actor card_holder as "Card Holder"
box "Reseller"
participant merchant as "Merchant"
end box
box "Transact 24"
participant acquiring as "Acquiring"
participant card_director as "Card Director"
participant tps as "TPS"
entity card_account as "Card Account"
entity merchant_account as "Merchant Account"
entity reseller_account as "Reseller Account"
end box
card_holder -> merchant : Pay for something
merchant -> acquiring : Transfer some money \nfrom card_holder to me
acquiring -> acquiring : Check if
@enduml
SEQUENCE DIAGRAM
6479411553501184
ReceiverReceiverDropControllerDropControllerDropHTTPDropHTTPCryptoUtilsCryptoUtilsGSONGSONreceiveMessages()receiveMessages(DropURL)http-OK (200) & DropMessagesloop[DropMessages]readBox(RcptPrivKey, NoiseBox)JSONMessageparseMessage(JSONMessage)DropMessageverifyMessage(DropMessage)alt[acknowledge_id is not zero]acknowledgeMessage(acknowledge_id)DropMessages
SEQUENCE DIAGRAM
6489484862423040
ReceiverReceiverDropControllerDropControllerDropHTTPDropHTTPCryptoUtilsCryptoUtilsGSONGSONreceiveMessages()receiveMessages(DropURL)http-OK (200) & DropMessagesloop[DropMessages]readBox(RcptPrivKey, NoiseBox)JSONMessageparseMessage(JSONMessage)DropMessageverifyMessage(DropMessage)alt[acknowledge_id is not zero]acknowledgeMessage(acknowledge_id)DropMessages
UserUserAppAppServerServerDatabaseDatabasevote for reviewmakePostRequest()vote()ResultSetalt[login key is correct]alt[review is found]HTTP Response(success:true)[else]HTTP Response(success:false)[else]HTTP Response(success:false)
SEQUENCE DIAGRAM
6490820060381184
UserUserAppAppServerServerDatabaseDatabasevote for reviewmakePostRequest()vote()ResultSetalt[login key is correct]alt[review is found]HTTP Response(success:true)[else]HTTP Response(success:false)[else]HTTP Response(success:false)
@startuml
actor User
User->App:vote for review
App->Server:makePostRequest()
Server->Database:vote()
Database-->Server:ResultSet
alt login key is correct
alt review is found
Server-->App:HTTP Response(success:true)
else else
Server-->App:HTTP Response(success:false)
end
else else
Server-->App:HTTP Response(success:false)
end
@enduml
@startuml
participant "Tool" as t
participant "Knowledge Base" as kb
t -> kb : SYN
t <- kb : SYN ACK
t -> kb : ACK
note left of t
分配test-id
end note
activate t
t -> kb : Start Test(test-id)
deactivate t
...
t -> kb : Query(test-id, msg)
t <- kb : Answer(test-id, msg)
...
t -> kb : Stop Test(test-id)
activate t
activate kb
note left of t
释放test-id及相关资源
end note
note right of kb
释放test-id相关资源
end note
t -> kb : FIN
deactivate t
deactivate kb
t <- kb : FIN ACK
t -> kb : ACK
@enduml
SEQUENCE DIAGRAM
6500483468361728
UserUserAppAppServerServerDatabaseDatabaselog outmakePostRequest()logoutUser()ResultSetalt[login key is correct]HTTP Response(success:true)[else]HTTP Response(success:false)
SEQUENCE DIAGRAM
6509976419827712
UserUserAppAppServerServerDatabaseDatabaselog outmakePostRequest()logoutUser()ResultSetalt[login key is correct]HTTP Response(success:true)[else]HTTP Response(success:false)
@startuml
actor User
User->App:log out
App->Server:makePostRequest()
Server->Database:logoutUser()
Database-->Server:ResultSet
alt login key is correct
Server-->App:HTTP Response(success:true)
else else
Server-->App:HTTP Response(success:false)
end
@enduml