@startuml
autonumber
Bob -> Alice : Authentication Request
Bob <- Alice : Authentication Response
autonumber 15
Bob -> Alice : Another authentication Request
Bob <- Alice : Another authentication Response
autonumber 40 10
Bob -> Alice : Yet another authentication Request
Bob <- Alice : Yet another authentication Response
@enduml
SEQUENCE DIAGRAM
6084542192418816
:ConfigurableClientList:CacheConfig:ZoneTableSegment(Mapped)seg1:MemorySegment(Mapped):ZoneTablela:LoadActionzw:ZoneWriterzd:ZoneDataseg2:MemorySegment(Mapped):b10-memmgr:b10-memmgr:ConfigurableClientList:CacheConfig:ZoneTableSegment(Mapped)seg1:MemorySegment(Mapped)seg2:MemorySegment(Mapped):ZoneTablela:LoadActionzw:ZoneWriterzd:ZoneDatanew/initial config(datasrc cfg)<<construct>>:ConfigurableClientListconfigure(cfg)<<construct>> (cfg):CacheConfig<<construct>>:ZoneTableSegment(Mapped)isWritable()Segment not writablewhen not resetfalsegetStatus()DataSourceStatus[]loop[for each datasrc with mapped segment]resetMemorySegment(datasrc_name,READ_WRITE,segmentparam)reset(READ_WRITE,segmentparam)<<construct>>seg1:MemorySegment(Mapped)<<construct>>:ZoneTablegetZoneTableAccessor(datasrc_name,cache=true)ZoneTableAccessorloop[for each zone given by ZoneTableIterator]getCachedZoneWriter(zone_name)getLoadAction()<<construct>>la:LoadActionla<<construct>> (la)zw:ZoneWriterzwload()(funcall)<<construct>> via helperszd:ZoneDatazdinstall()addZone(zd)NULL (no old data)command tomodules(datasrc_name,segmentparam)ack from allmodulesresetMemorySegment(datasrc_name,READ_WRITE,segmentparam)reset(READ_WRITE,segmentparam)<<destroy>><<construct>>seg2:MemorySegment(Mapped)load zonefor each zonegiven byZoneTableIterator
SEQUENCE DIAGRAM
6087763954761728
:ConfigurableClientList:CacheConfig:ZoneTableSegment(Mapped)seg1:MemorySegment(Mapped):ZoneTablela:LoadActionzw:ZoneWriterzd:ZoneDataseg2:MemorySegment(Mapped):b10-memmgr:b10-memmgr:ConfigurableClientList:CacheConfig:ZoneTableSegment(Mapped)seg1:MemorySegment(Mapped)seg2:MemorySegment(Mapped):ZoneTablela:LoadActionzw:ZoneWriterzd:ZoneDatanew/initial config(datasrc cfg)<<construct>>:ConfigurableClientListconfigure(cfg)<<construct>> (cfg):CacheConfig<<construct>>:ZoneTableSegment(Mapped)isWritable()Segment not writablewhen not resetfalsegetStatus()DataSourceStatus[]loop[for each datasrc with mapped segment]resetMemorySegment(datasrc_name,READ_WRITE,segmentparam)reset(READ_WRITE,segmentparam)<<construct>>seg1:MemorySegment(Mapped)<<construct>>:ZoneTablegetZoneTableAccessor(datasrc_name,cache=true)ZoneTableAccessorloop[for each zone given by ZoneTableIterator]getCachedZoneWriter(zone_name)getLoadAction()<<construct>>la:LoadActionla<<construct>> (la)zw:ZoneWriterzwload()(funcall)<<construct>> via helperszd:ZoneDatazdinstall()addZone(zd)NULL (no old data)command tomodules(datasrc_name,segmentparam)ack from allmodulesresetMemorySegment(datasrc_name,READ_WRITE,segmentparam)reset(READ_WRITE,segmentparam)<<destroy>><<construct>>seg2:MemorySegment(Mapped)load zonefor each zonegiven byZoneTableIterator
@startuml
skinparam usecase {
BackgroundColor DarkSeaGreen
BorderColor DarkSlateGray
BackgroundColor << Main >> YellowGreen
BorderColor << Main >> YellowGreen
ArrowColor Olive
ActorBorderColor black
ActorFontName Courier
ActorBackgroundColor << Human >> Gold
}
User << Human >>
:Main Database: as MySql << Application >>
(Start) << One Shot >>
(Use the application) as (Use) << Main >>
User -> (Start)
User --> (Use)
MySql --> (Use)
@enduml
@startuml
Class Stage
Class Timeout {
+constructor:function(cfg)
+timeout:function(ctx)
+overdue:function(ctx)
+stage: Stage
}
Stage <|-- Timeout
@enduml
CLASS DIAGRAM
6118084544823296
Transform Jobs Workers (Successful Block Copy or FFmpeg transcoding)OrchestraOrchestraStorageStorageTransformTransformStartup (celeryd -Q queue_name)<< get next transform job from queue >><< next transform job is ... >>concurrency_valuejobs can be threatedsimultaneously (multithreading)alt[if job encoder_name is 'copy']Launch new block copy<< read input media from medias path >><< read block 1/N from input media >><< write block 1/N to output media >><< update job status & statistics ... >><< read block 2/N from input media >><< write block 2/N to output media >><< read block N/N from input media >><< write block N/N to output media >><< end of file >><< update job status & statistics ... >>[job encoder_name is 'ffmpeg' or 'dashcast']Launch new FFmpeg / DashCast instance<< read input media from medias path >><< FFmpeg / DashCast read input media >><< FFmpeg / DashCast write output media >><< update job status & statistics ... >><< FFmpeg / DashCast read input media >><< FFmpeg / DashCast write output media >><< FFmpeg / DashCast read input media >><< FFmpeg / DashCast write output media >><< end of file >><< update job status & statistics ... >>POST /transform/callback {"job_id": "<uuid_of_job>", "status": "SUCCESS"}Set media status=READY into MongoDBOK 200{"status": 200, value="Your work is much appreciated, thanks !"}
SEQUENCE DIAGRAM
6120602737836032
Transform Jobs Workers (Successful Block Copy or FFmpeg transcoding)OrchestraOrchestraStorageStorageTransformTransformStartup (celeryd -Q queue_name)<< get next transform job from queue >><< next transform job is ... >>concurrency_valuejobs can be threatedsimultaneously (multithreading)alt[if job encoder_name is 'copy']Launch new block copy<< read input media from medias path >><< read block 1/N from input media >><< write block 1/N to output media >><< update job status & statistics ... >><< read block 2/N from input media >><< write block 2/N to output media >><< read block N/N from input media >><< write block N/N to output media >><< end of file >><< update job status & statistics ... >>[job encoder_name is 'ffmpeg' or 'dashcast']Launch new FFmpeg / DashCast instance<< read input media from medias path >><< FFmpeg / DashCast read input media >><< FFmpeg / DashCast write output media >><< update job status & statistics ... >><< FFmpeg / DashCast read input media >><< FFmpeg / DashCast write output media >><< FFmpeg / DashCast read input media >><< FFmpeg / DashCast write output media >><< end of file >><< update job status & statistics ... >>POST /transform/callback {"job_id": "<uuid_of_job>", "status": "SUCCESS"}Set media status=READY into MongoDBOK 200{"status": 200, value="Your work is much appreciated, thanks !"}
@startuml
skin BlueModern
title Transform Jobs Workers (Successful Block Copy or FFmpeg transcoding)
'participant "WebUI" as W
participant "Orchestra" as O
participant "Storage" as S
participant "Transform" as T
'participant "Publisher" as P
activate O
T -> T: Startup (celeryd -Q queue_name)
activate T
T -> O: << get next transform job from queue >>
O --> T: << next transform job is ... >>
note right: <b>concurrency_value</b> jobs can be threated\nsimultaneously (multithreading)
alt if job encoder_name is 'copy'
T -> T: Launch new block copy
T -> S: << read input media from medias path >>
activate S
S --> T: << read block 1/N from input media >>
T --> S: << write block 1/N to output media >>
T --> O: << update job status & statistics ... >>
S --> T: << read block 2/N from input media >>
T --> S: << write block 2/N to output media >>
S --> T: << read block N/N from input media >>
T --> S: << write block N/N to output media >>
S --> T: << end of file >>
deactivate S
T --> O: << update job status & statistics ... >>
else job encoder_name is 'ffmpeg' or 'dashcast'
T -> T: Launch new FFmpeg / DashCast instance
T -> S: << read input media from medias path >>
activate S
S --> T: << FFmpeg / DashCast read input media >>
T --> S: << FFmpeg / DashCast write output media >>
T --> O: << update job status & statistics ... >>
S --> T: << FFmpeg / DashCast read input media >>
T --> S: << FFmpeg / DashCast write output media >>
S --> T: << FFmpeg / DashCast read input media >>
T --> S: << FFmpeg / DashCast write output media >>
S --> T: << end of file >>
deactivate S
T --> O: << update job status & statistics ... >>
end
T -> O: POST /transform/callback {"job_id": "<uuid_of_job>", "status": "SUCCESS"}
activate O
O -> O: Set media status=READY into MongoDB
O --> T: <b>OK 200</b> {"status": 200, value="Your work is much appreciated, thanks !"}
deactivate T
deactivate O
@enduml
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml
SEQUENCE DIAGRAM
6121211817885696
UserUserAppAppServerServerDatabaseDatabaseregistermakePostRequest()registerNewUser()ResultSetalt[email is unique]HTTP Response(success:true)[else]HTTP Response(success:false)
SEQUENCE DIAGRAM
6129861345148928
UserUserAppAppServerServerDatabaseDatabaseregistermakePostRequest()registerNewUser()ResultSetalt[email is unique]HTTP Response(success:true)[else]HTTP Response(success:false)
@startuml
actor User
User->App:register
App->Server:makePostRequest()
Server->Database:registerNewUser()
Database-->Server:ResultSet
alt email is unique
Server-->App:HTTP Response(success:true)
else else
Server-->App:HTTP Response(success:false)
end
@enduml
SEQUENCE DIAGRAM
6129861345148928
ClassAClassAClassBClassBClassCClassCClassDClassDWe do outside-in if westart with ClassAWe do inside-out if westart with ClassD
SEQUENCE DIAGRAM
6135265487749120
ClassAClassAClassBClassBClassCClassCClassDClassDWe do outside-in if westart with ClassAWe do inside-out if westart with ClassD
@startuml
note left of ClassA #aqua
We do outside-in if we
start with ClassA
end note
-> ClassA
|||
ClassA -> ClassB
|||
ClassB -> ClassC
|||
ClassB <- ClassC
|||
ClassB -> ClassD
|||
ClassB <- ClassD
|||
ClassA <- ClassB
|||
<- ClassA
note right of ClassD #aqua
We do inside-out if we
start with ClassD
end note
@enduml
SEQUENCE DIAGRAM
6135265487749120
User Pulls newest changes of documentsUserUserPullClientPullClientPsychicOctoRobotServerPsychicOctoRobotServerGitServerGitServerNode.js server which serves thewebpages requested by the user.requests page forpulling new revisionsweb page forPullClientThe PullClient is aJavascript client made of js-gitand our code bundled with browserifyreads local "git"directory to checkfor repositoriespresentDisplays documentsthat are trackedin repositories locallyselects documentrepository to pullalt[Contact GitServer Directly]Requests new revisions for repositoryNew revisions for repository[get updates through PsychicOctoRobotServer]Sends request new revisions of repoRequests new revisions for repositoryNew revisions for repositoryNew revisions for repositoryDisplays message notifying user of success/failure
SEQUENCE DIAGRAM
6136375468359680
User Pulls newest changes of documentsUserUserPullClientPullClientPsychicOctoRobotServerPsychicOctoRobotServerGitServerGitServerNode.js server which serves thewebpages requested by the user.requests page forpulling new revisionsweb page forPullClientThe PullClient is aJavascript client made of js-gitand our code bundled with browserifyreads local "git"directory to checkfor repositoriespresentDisplays documentsthat are trackedin repositories locallyselects documentrepository to pullalt[Contact GitServer Directly]Requests new revisions for repositoryNew revisions for repository[get updates through PsychicOctoRobotServer]Sends request new revisions of repoRequests new revisions for repositoryNew revisions for repositoryNew revisions for repositoryDisplays message notifying user of success/failure
@startuml
title User Pulls newest changes of documents
actor User
participant PullClient
participant PsychicOctoRobotServer
note right of PsychicOctoRobotServer
Node.js server which serves the
webpages requested by the user.
end note
participant GitServer
User -> PsychicOctoRobotServer : requests page for \n pulling new revisions
PsychicOctoRobotServer -> User : web page for \n PullClient
note right
The PullClient is a
Javascript client made of js-git
and our code bundled with browserify
end note
PullClient -> PullClient : reads local "git" \n directory to check \n for repositories \n present
PullClient -> User : Displays documents \n that are tracked \n in repositories locally
User -> PullClient : selects document \n repository to pull
alt Contact GitServer Directly
PullClient -> GitServer : Requests new revisions for repository
GitServer -> PullClient : New revisions for repository
else get updates through PsychicOctoRobotServer
PullClient -> PsychicOctoRobotServer : Sends request new revisions of repo
PsychicOctoRobotServer -> GitServer : Requests new revisions for repository
GitServer -> PsychicOctoRobotServer : New revisions for repository
PsychicOctoRobotServer -> PullClient : New revisions for repository
end
PullClient -> User : Displays message notifying user of success/failure
@enduml
UserUserAppAppServerServerDatabaseDatabasecomment on reviewmakePostRequest()putComment()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
6138859167416320
UserUserAppAppServerServerDatabaseDatabasecomment on reviewmakePostRequest()putComment()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:comment on review
App->Server:makePostRequest()
Server->Database:putComment()
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
class Test11{
+void Test11 ( )
+void ~Test11 ( )
+int function ( a : int , b : int)
+void getVoidDefnitionInClass ( a : int , b : int)
}
@enduml