@startuml
title Simple <b>Usecase </b>\nwith one actor
"Use the application" as (Use)
User -> (Use)
@enduml
USE CASE DIAGRAM
5836609568112640
Select a serverServer processingBuildinit object and startbackground procSelectfind proper serverAwaitwait for server selectto have at least amaster serverReceivereceive serverobjects from channelUriClient Objectserverserver objectDiscoverloop throughlist of serversCatagorizecatagorize listof serversSendsend each serverobject through channelTopologyset server types andClient topologyInterrogateask server for secondary hostsserver from urilist of serverslist of serverslist of serversmaster serverfound servers
STATE DIAGRAM
5839127761125376
Select a serverServer processingBuildinit object and startbackground procSelectfind proper serverAwaitwait for server selectto have at least amaster serverReceivereceive serverobjects from channelUriClient Objectserverserver objectDiscoverloop throughlist of serversCatagorizecatagorize listof serversSendsend each serverobject through channelTopologyset server types andClient topologyInterrogateask server for secondary hostsserver from urilist of serverslist of serverslist of serversmaster serverfound servers
@startuml
title Select a server
state "Server processing" as SProc {
[*] --> Build : Uri
Build --> [*] : Client Object
Build : init object and start\nbackground proc
[*] --> Select
Select --> Await
Await : wait for server select\nto have at least a\nmaster server
Await --> Select : server
Select --> [*] : server object
Select : find proper server
Receive : receive server\nobjects from channel
Receive --> Await
--
[*] --> Discover : server from uri
Discover : loop through\nlist of servers
Discover --> Catagorize : list of servers
Catagorize : catagorize list\nof servers
Catagorize --> Send : list of servers
Catagorize --> Topology : list of servers
Catagorize --> Interrogate : master server
Interrogate : ask server for secondary hosts
Interrogate --> Discover : found servers
Send : send each server\nobject through channel
Topology : set server types and\nClient topology
Topology --> Discover
}
@enduml
STATE DIAGRAM
5839127761125376
ServerGamemap<string routingId, Robot &> _robotsmap<string routingId, Player &> _playersmap<string, Team &> _teamsbool _isGameStartedvoid start()void stop()void addRobot(string iName)void addPlayer(string iName)Robot getAvailableRobot()void fillGameStateMessage (orwell::messages::GameState & iMessage)routingId = Robot nameDo we need explicit link between robot and player ?Playerstring nameTeam & _teamRobotstring namevoid fillRobotStateMessage (orwell::messages::RobotState & iMessage)Teamlist<Player &> _playersvoid addPlayer(Player iPlayer)void removePlayer(Player iPlayer)10-*10-*10-*10-*1111
CLASS DIAGRAM
5839736841175040
ServerGamemap<string routingId, Robot &> _robotsmap<string routingId, Player &> _playersmap<string, Team &> _teamsbool _isGameStartedvoid start()void stop()void addRobot(string iName)void addPlayer(string iName)Robot getAvailableRobot()void fillGameStateMessage (orwell::messages::GameState & iMessage)routingId = Robot nameDo we need explicit link between robot and player ?Playerstring nameTeam & _teamRobotstring namevoid fillRobotStateMessage (orwell::messages::RobotState & iMessage)Teamlist<Player &> _playersvoid addPlayer(Player iPlayer)void removePlayer(Player iPlayer)10-*10-*10-*10-*1111
@startuml
scale 600 width
class Server
class Game {
void start()
void stop()
void addRobot(string iName)
void addPlayer(string iName)
Robot getAvailableRobot()
void fillGameStateMessage (orwell::messages::GameState & iMessage)
map<string routingId, Robot &> _robots
map<string routingId, Player &> _players
map<string, Team &> _teams
bool _isGameStarted
}
note right of Game {
routingId = Robot name
}
note "Do we need explicit link between robot and player ?" as N1
N1 -- Game
class Player {
string name
Team & _team
}
class Robot{
void fillRobotStateMessage (orwell::messages::RobotState & iMessage)
string name
}
class Team {
void addPlayer(Player iPlayer)
void removePlayer(Player iPlayer)
list<Player &> _players
}
Game "1" *-- "0-*" Player
Game "1" *-- "0-*" Robot
Game "1" *-- "0-*" Team
Team "1" o-- "0-*" Player
Server "1" -- "1" Game
Robot "1" -- "1" Player
@enduml
CLASS DIAGRAM
5839736841175040
AppAppKaltura LocalAssetsManagerKaltura LocalAssetsManagerDownloads Media tolocalPathregisterAsset(entryConfig, flavorId, localPath)SDK acquires licensealt[Success]Success[Failure]Failure
SEQUENCE DIAGRAM
5840451684794368
AppAppKaltura LocalAssetsManagerKaltura LocalAssetsManagerDownloads Media tolocalPathregisterAsset(entryConfig, flavorId, localPath)SDK acquires licensealt[Success]Success[Failure]Failure
@startuml
participant App
participant "Kaltura LocalAssetsManager" as LAM
note over App: Downloads Media to //localPath//
App->>LAM: registerAsset(entryConfig, flavorId, localPath)
note over LAM: SDK acquires license
alt Success
LAM->>App: Success
else Failure
LAM->>App: Failure
end
@enduml
@startuml
:foo1;
-> You can put text on arrows;
if (test) then
-[#blue]->
:foo2;
-[#green]-> The text can
also be on several lines
and **very** long...;
:foo3;
else
-[#black]->
:foo4;
endif
-[#gray]->
:foo5;
@enduml
@startuml
left to right direction
skinparam packageStyle rect
actor customer
actor clerk
rectangle checkout {
customer -- (checkout)
(checkout) .> (payment) : include
(help) .> (checkout) : extends
(checkout) -- clerk
}
@enduml
@startuml
object user {
name = "Dummy"
id = 123
}
@enduml
CLASS DIAGRAM
5868127380307968
Black boxtestingWhite boxtestingUnittestingIncrementalintegrationtestingIntegrationtestingFunctionaltestingEnd to endtestingRegressiontestingAcceptancetestingStresstestingPerformancetestingUsabilitytestingInstall/uninstalltestingSecuritytestingCompatibilitytesting
COMPONENT DIAGRAM
5871511546101760
Black boxtestingWhite boxtestingUnittestingIncrementalintegrationtestingIntegrationtestingFunctionaltestingEnd to endtestingRegressiontestingAcceptancetestingStresstestingPerformancetestingUsabilitytestingInstall/uninstalltestingSecuritytestingCompatibilitytesting
Client Server interactionapplicationClientClient T0Client T1ServerServer TMonitorMonitor Tmongodnew(uri)store serverport in todo listPromise.start()load server:portfrom todo listClient objectnew()new()Monitor objectServer objectserver-init()start-monitor()Promise.start()Promiseismaster commandismaster resulttap from monitormonitor dataSet statustap from monitormonitor datastore new serverdata in todo listStore inserver listselect-server()Get serverfrom serverlistServer objectMonitor data is sent from Monitor thread using a SupplyData in Client structures for communication are guarded with Semaphores
SEQUENCE DIAGRAM
5874792632680448
Client Server interactionapplicationClientClient T0Client T1ServerServer TMonitorMonitor Tmongodnew(uri)store serverport in todo listPromise.start()load server:portfrom todo listClient objectnew()new()Monitor objectServer objectserver-init()start-monitor()Promise.start()Promiseismaster commandismaster resulttap from monitormonitor dataSet statustap from monitormonitor datastore new serverdata in todo listStore inserver listselect-server()Get serverfrom serverlistServer objectMonitor data is sent from Monitor thread using a SupplyData in Client structures for communication are guarded with Semaphores
@startuml
title Client Server interaction
hide footbox
actor application as app
participant Client
participant "Client T0" as Clt0 #a0fefe
participant "Client T1" as Clt1 #fea0fe
participant Server #a0fefe
participant "Server T" as Srvt0 #a0fea0
participant Monitor #a0fefe
participant "Monitor T" as Mnt0 #c0c0c0
database mongod
activate mongod
app -> Client: new(uri)
activate Client
'Todo list is a structure guarded by semaphores
Client -> Client: store server\nport in todo list
Client -> Clt0: Promise.start()
activate Clt0
Clt0 -> Clt0: load server:port\nfrom todo list
Client -> app: Client object
deactivate Client
Clt0 -> Server: new()
activate Server
Server -> Monitor: new()
activate Monitor
Monitor -> Server: Monitor object
deactivate Monitor
Server -> Clt0: Server object
deactivate Server
Clt0 -> Server: server-init()
activate Server
Server -> Monitor: start-monitor()
activate Monitor
Monitor -> Mnt0: Promise.start()
activate Mnt0
Monitor -> Server: Promise
deactivate Monitor
Mnt0 -[#a000bf]-> mongod: ismaster command
mongod -[#a000bf]-> Mnt0: ismaster result
Server -> Srvt0: tap from monitor
activate Srvt0
deactivate Server
Mnt0 o-[#a000bf]->o Srvt0: monitor data
'activate Srvt0
Srvt0 -> Srvt0: Set status
'deactivate Srvt0
Clt0 -> Clt1: tap from monitor
activate Clt1
Mnt0 o-[#a000bf]->o Clt1: monitor data
deactivate Clt0
Clt1 -> Clt1: store new server\ndata in todo list
Clt1 -> Clt1: Store in\nserver list
'note right: in thread
'note right: returns immediate
'Server --> mongod: connect
app -> Client: select-server()
activate Client
Client -> Client: Get server\nfrom server\nlist
Client -> app: Server object
deactivate Client
legend
Monitor data is sent from Monitor thread using a Supply
Data in Client structures for communication are guarded with Semaphores
end legend
@enduml
SEQUENCE DIAGRAM
5874792632680448
startecho a warningstart Apache2exit 1launch Celerydwith screenexit 2sleep for 5 secondsexit 3echo a successstorage mounted &all configured ?NostartedNoscreenrunning ?NoYesokNoYesscreen running ?NoYes
ACTIVITY DIAGRAM
5874921213263872
startecho a warningstart Apache2exit 1launch Celerydwith screenexit 2sleep for 5 secondsexit 3echo a successstorage mounted &all configured ?NostartedNoscreenrunning ?NoYesokNoYesscreen running ?NoYes
@startuml
skinparam activity {
FontColor white
AttributeFontColor white
FontSize 17
AttributeFontSize 15
AttributeFontname Droid Sans Mono
BackgroundColor #527BC6
BorderColor black
ArrowColor #222266
}
partition start {
(*) --> if "storage mounted &\nall configured ?" then
-right-> [No] "echo a warning"
--> (*)
else
--> "start Apache2"
--> if "started" then
--> [No] "exit 1"
--> (*)
else
--> if "screen\nrunning ?" then
-right-> [No] "launch Celeryd\nwith screen"
--> ===A===
else
--> [Yes] ===A===
endif
if "ok" then
--> [No] "exit 2"
--> (*)
else
--> [Yes] "sleep for 5 seconds"
if "screen running ?" then
--> [No] "exit 3"
--> (*)
else
--> [Yes] "echo a success"
--> (*)
endif
endif
endif
endif
}
@enduml
ACTIVITY DIAGRAM
5874921213263872
Git branch conventions in avdecc-libdevelopment sequenceDeveloperX'senvironmentDeveloperY'senvironmentupstream gitDeveloperXDeveloperXbranchin forked localDeveloperX's git repobranchin forked localDeveloperX's git repoDeveloperYDeveloperYbranchin forked localDeveloperY's git repobranchin forked localDeveloperY's git repostagingbranchin upstream repostagingbranchin upstream repomasterbranchin upstream repomasterbranchin upstream repoManagerManagerIn this example DeveloperX isworking on a new featurecommits changes to forked git repomany updatescompleted a new featuregit pull requestemailed pull requestdo merge to staginggit mergeemail request to test stagingemail request to test stagingDeveloperY is taking on the roleof tester in this exampleloop[until staging test signoff]pulls staging branch for testinggit pullcommits bugfixes to forked git repogit pull requestemailed pull requestdo merge to staginggit mergeSignoffs for staging tests collected from all partiesdo mergestaging merged to master branch
SEQUENCE DIAGRAM
5881612235440128
Git branch conventions in avdecc-libdevelopment sequenceDeveloperX'senvironmentDeveloperY'senvironmentupstream gitDeveloperXDeveloperXbranchin forked localDeveloperX's git repobranchin forked localDeveloperX's git repoDeveloperYDeveloperYbranchin forked localDeveloperY's git repobranchin forked localDeveloperY's git repostagingbranchin upstream repostagingbranchin upstream repomasterbranchin upstream repomasterbranchin upstream repoManagerManagerIn this example DeveloperX isworking on a new featurecommits changes to forked git repomany updatescompleted a new featuregit pull requestemailed pull requestdo merge to staginggit mergeemail request to test stagingemail request to test stagingDeveloperY is taking on the roleof tester in this exampleloop[until staging test signoff]pulls staging branch for testinggit pullcommits bugfixes to forked git repogit pull requestemailed pull requestdo merge to staginggit mergeSignoffs for staging tests collected from all partiesdo mergestaging merged to master branch
@startuml
title Git branch conventions in avdecc-lib\ndevelopment sequence
box "DeveloperX's\nenvironment" #LightBlue
actor DeveloperX
participant "branch\nin forked local\nDeveloperX's git repo" as LX
end box
box "DeveloperY's\nenvironment" #LightYellow
actor DeveloperY
participant "branch\nin forked local\nDeveloperY's git repo" as LY
end box
box "upstream git" #LightBlue
participant "<b>staging</b> branch\nin upstream repo" as S
participant "<b>master</b> branch\nin upstream repo" as M
end box
actor Manager
note over DeveloperX
In this example DeveloperX is
working on a new feature
end note
DeveloperX -> LX: commits changes to forked git repo
LX -> LX: many updates
DeveloperX -> LX: completed a new feature
LX -> S : git pull request
S -> Manager : emailed pull request
Manager -> S: do merge to staging
S -> S : git merge
Manager --> DeveloperX: email request to test staging
Manager --> DeveloperY: email request to test staging
note over DeveloperY
DeveloperY is taking on the role
of tester in this example
end note
loop until staging test signoff
S -> DeveloperY: pulls staging branch for testing
S -> LY: git pull
DeveloperY -> LY: commits bugfixes to forked git repo
LY -> S : git pull request
S -> Manager : emailed pull request
Manager -> S: do merge to staging
S -> S : git merge
end
==Signoffs for staging tests collected from all parties==
Manager -> S: do merge
S -> M: staging merged to master branch
@enduml