Commit 3cc4b524 authored by Martin Necasky's avatar Martin Necasky
Browse files

Quality attributes in C4 model part 2

parent afb33b38
......@@ -25,9 +25,6 @@ workspace "Czech National Open Data Catalog (NODC) workspace" "This workspace do
}
views {
systemContext nodc "NODC_SystemContext_View" {
include *
}
systemLandscape nodc "NODC_SystemLandscape_View" {
include *
......
workspace "Czech National Open Data Catalog (NODC) workspace" "This workspace documents the architecture of the National Open Data Catalog (NODC) which serves as a catalog of all open data sets published by public institutions in Czechia." {
model {
nodc = softwareSystem "Czech National Open Data Catalog (NODC)" "Stores and presents metadata records about data sets and harvests meta data from local open data catalogs." {
webFrontend = container "NODC Web Front-end" "Provides all functionality for browsing and viewing metadata records to open data consumers." "TypeScript" "Web Front-End"
server = container "NODC Server" "Implements all business functionality for browsing and viewing metadata records and provides it via API." "Node.js" {
group "Infrastructure" {
listAPI = component "Record List API" "Provides API for getting a list of metadata records according to specified search parameters via API." "" "Infrastructure"
detailAPI = component "Record Detail API" "Provides API for getting a detail of a given metadata record via API." "" "Infrastructure"
recordIndexGateway = component "Metadata Index Gateway" "Provides access to a metadata records index." "" "Infrastructure"
recordDetailGateway = component "Metadata Detail Gateway" "Provides access to a metadata records store." "" "Infrastructure"
codeListAccess = component "Code List Gateway" "Provides access to code lists and their items via HTTPS dereferencing Web IRIs." "" "Infrastructure"
}
group "Business Logic" {
searchController = component "Records Search Controller" "Implements and provides business functionality related to searching for metadata records." "" "Logic"
detailController = component "Record Detail Controller" "Implements and provides business functionality related to viewing details of metadata records." "" "Logic"
}
group "Domain Model" {
datasetModel = component "Dataset" "Internal domain model of dataset metadata." "" "Model"
distributionModel = component "Distribution Model" "Internal domain model of distribution metadata." "" "Model"
}
}
recordIndex = container "Metadata Index" "Index for fast searching in metadata records." "Apache SOLR configuration and schema"
recordStorage = container "Metadata Storage" "Storage of metadata records." "Apache CouchDB database"
harvestor = container "Metadata Harvestor" "Harvests metadata records from local open data catalogs." "LinkedPipes ETL pipeline"
!docs docs
}
lodc = softwareSystem "Local Open Data Catalog" "Stores and presents metadata records about data sets and harvests meta data from local open data catalogs." "Existing System"
lodcRegistry = softwareSystem "Registry of local open data catalogs" "SPARQL endpoint for reading locations of registered local open data catalogs which need to be harvested." "Existing System"
consumer = person "Consumer" "A person from the public who searches for data sets and accesses them for various purposes." "Public"
gov = person "Government" "A person from a government institution who searches for data sets and accesses them for various purposes." "Gov"
nodcAdmin = person "NODC admin" "A person who administers NODC" "Admin"
lodcAdmin = person "LODC admin" "A person who administers LODC" "Admin"
consumer -> nodc "Searches for metadata records in" "HTTPS"
gov -> nodc "Searches for metadata records in" "HTTPS"
nodcAdmin -> nodc "Administers"
lodcAdmin -> lodc "Administers"
nodc -> lodc "Harvests metada records from" "DCAT-AP on HTTPS"
consumer -> webFrontend "Searches for metadata records and views their details with" "HTTPS"
gov -> webFrontend "Searches for metadata records and views their details with" "HTTPS"
deliveryToFrontend = webFrontend -> server "Uses to deliver functionality" "HTTPS"
server -> recordIndex "Uses for fast retrieval of metadata records lists" "HTTPS"
server -> recordStorage "Uses for fast retrieval of metadata records details" "HTTPS"
harvestor -> lodc "Harvests metadata records from" "DCAT-AP on HTTPS"
harvestor -> recordIndex "Uses to reset metadata records index. The whole index is always replaced" "HTTPS"
harvestor -> recordStorage "Uses to persists harvested metadata records. All records are always replaced" "HTTPS"
harvestor -> lodcRegistry "Uses to read locations of registered local open data catalogs" "HTTPS"
harvestor -> lodcRegistry "Uses to log suspicious LODC content security event occurence" "HTTPS"
harvestor -> nodcAdmin "Notifies about suspicious LODC content" "e-mail"
harvestor -> lodcAdmin "Notifies about suspicious LODC content" "e-mail"
webFrontend -> listAPI "Makes API calls to" "JSON/HTTPS"
webFrontend -> detailAPI "Makes API calls to" "JSON/HTTPS"
listAPI -> searchController "Uses to access search business functionality"
detailAPI -> detailController "Uses to access detail business functionality"
searchController -> datasetModel "Uses to access metadata about datasets"
detailController -> datasetModel "Uses to access metadata about datasets"
detailController -> distributionModel "Uses to access metadata about distributions"
searchController -> recordIndexGateway "Uses to retrieve list of metadata records with given values of selected properties"
detailController -> recordDetailGateway "Uses to retrieve detailed metadata"
detailController -> codeListAccess "Uses to retrieve code list items labels and descriptions"
deploymentEnvironment "Server Development" {
deploymentNode "Developer Laptop" "" "Microsoft Windows 11" {
deploymentNode "Web Browser" "" "Chrome, Firefox or Edge" {
containerInstance webFrontend
}
deploymentNode "Node.js" "" "Node.js 14.*" {
containerInstance server
}
}
deploymentNode "NODC develop" "" "NODC development infrastructure" {
deploymentNode "NODC-dev-data" "" "Ubuntu 18.04 LTS" {
deploymentNode "Apache Solr" "" "Apache Solr 8.*" {
containerInstance recordIndex
}
deploymentNode "Apache CouchDB" "" "Apache CouchDB 3.*" {
containerInstance recordStorage
}
}
// harvestor instance is not present in the server development deployment
}
}
deploymentEnvironment "Live" {
deploymentNode "Gov User's device" "" "Microsoft Windows or Android" {
deploymentNode "Web Browser" "" "Chrome, Firefox or Edge" {
govClientInstance = containerInstance webFrontend
}
}
deploymentNode "Public User's device" "" "Microsoft Windows or Android" {
deploymentNode "Web Browser" "" "Chrome, Firefox or Edge" {
pubClientInstance = containerInstance webFrontend
}
}
deploymentNode "NODC UPAAS" "" "NODC eGov unified runtime environment (UPAAS)" {
deploymentNode "NODC-upaas-balancer" "" "Ubuntu 18.04 LTS" {
balancer = infrastructureNode "Load balancer" "" "NGINX" "Infrastructure"
}
deploymentNode "NODC-upaas-app-gov" "" "Ubuntu 18.04 LTS" "" 3 {
deploymentNode "Node.js" "" "Node.js 14.*" {
govServerInstance = containerInstance server
}
}
deploymentNode "NODC-upaas-app-public" "" "Ubuntu 18.04 LTS" "" 1 {
deploymentNode "Node.js" "" "Node.js 14.*" {
pubServerInstance = containerInstance server
}
}
deploymentNode "NODC-upaas-index" "" "Ubuntu 18.04 LTS" {
deploymentNode "Apache Solr" "" "Apache Solr 8.*" {
containerInstance recordIndex
}
}
deploymentNode "NODC-upaas-storage" "" "Ubuntu 18.04 LTS" {
deploymentNode "Apache CouchDB" "" "Apache CouchDB 3.*" {
containerInstance recordStorage
}
}
deploymentNode "LODC-upaas-etl" "" "Ubuntu 18.04 LTS" "" 4 {
deploymentNode "LinkedPipes ETL" {
containerInstance harvestor
}
}
deploymentNode "LODC-registry" {
softwareSystemInstance lodcRegistry
}
}
deploymentNode "External open data provider" {
softwareSystemInstance lodc
}
balancer -> govServerInstance "Forwards requests to" "HTTPS"
govClientInstance -> balancer "Requests NODC functionality from" "HTTPS"
//pubClientInstance -> pubServerInstance "Requests NODC functionality from" "HTTPS"
}
}
views {
systemContext nodc "NODC_SystemContext_View" {
include *
exclude nodcAdmin
exclude lodcAdmin
}
container nodc "NODC_Container_View" {
include *
}
component server "Server_Component_View" {
include *
}
deployment nodc "Server Development" "Server_Development_Deployment" {
include *
}
deployment nodc "Live" "Live_Deployment" {
include *
//exclude deliveryToFrontend
exclude govClientInstance -> pubServerInstance
exclude govClientInstance -> govServerInstance
exclude pubClientInstance -> govServerInstance
}
dynamic * "Harvesting_System_Dynamic_View" "Local Open Data Catalog Harvesting Scenario - Software System Dynamics" {
nodc -> lodcRegistry
nodc -> lodc
}
dynamic nodc "Harvesting_Container_Dynamic_View" "Local Open Data Catalog Harvesting Scenario - Container Dynamics" {
harvestor -> recordIndex "Clears index"
harvestor -> recordStorage "Clears storage"
harvestor -> lodcRegistry "Reads locations of registered local open data catalogs"
harvestor -> lodc
harvestor -> recordStorage "Stores metadata records from LODC"
harvestor -> recordIndex "Indexes metadata records from LODC"
}
dynamic nodc "Harvesting_Container_Security_Dynamic_View" "Local Open Data Catalog Harvesting Security Scenario - Container Dynamics" {
harvestor -> recordIndex "Clears index"
harvestor -> recordStorage "Clears storage"
harvestor -> lodcRegistry "Reads locations of registered local open data catalogs"
harvestor -> lodc
harvestor -> lodcRegistry "Logs suspicious LODC content security event occurence"
}
styles {
element "Software System" {
background #32cd32
color #ffffff
}
element "Container" {
background #63cd32
color #ffffff
}
element "Component" {
background #92cd32
color #ffffff
}
element "Existing System" {
background #999999
color #ffffff
}
element "Web Front-End" {
shape WebBrowser
}
element "Infrastructure" {
shape Pipe
}
element "Logic" {
shape Component
}
element "Model" {
shape RoundedBox
}
element "Person" {
shape Person
}
element "Public" {
background #999999
color #ffffff
}
element "Gov" {
background #006400
color #ffffff
}
element "Admin" {
background #9cbceb
color #ffffff
}
}
}
}
\ No newline at end of file
workspace extends sampleworkspace09.dsl {
workspace extends sampleworkspace16.dsl {
}
\ No newline at end of file
{
"id" : 1,
"name" : "Czech National Open Data Catalog (NODC) workspace",
"description" : "This workspace documents the architecture of the National Open Data Catalog (NODC) which serves as a catalog of all open data sets published by public institutions in Czechia.",
"revision" : 0,
"lastModifiedDate" : "2021-12-01T14:12:55Z",
"lastModifiedAgent" : "structurizr-web/2502",
"properties" : {
"structurizr.dsl" : "d29ya3NwYWNlIGV4dGVuZHMgc2FtcGxld29ya3NwYWNlMTUuZHNsIHsKCn0K"
},
"configuration" : { },
"model" : {
"people" : [ {
"id" : "6",
"tags" : "Element,Person,Public",
"name" : "Consumer",
"description" : "A person from the public who searches for data sets and accesses them for various purposes.",
"relationships" : [ {
"id" : "8",
"tags" : "Relationship",
"sourceId" : "6",
"destinationId" : "1",
"description" : "Searches for metadata records in",
"technology" : "HTTPS"
} ],
"location" : "Unspecified"
}, {
"id" : "7",
"tags" : "Element,Person,Gov",
"name" : "Government",
"description" : "A person from a government institution who searches for data sets and accesses them for various purposes.",
"relationships" : [ {
"id" : "9",
"tags" : "Relationship",
"sourceId" : "7",
"destinationId" : "1",
"description" : "Searches for metadata records in",
"technology" : "HTTPS"
} ],
"location" : "Unspecified"
} ],
"softwareSystems" : [ {
"id" : "1",
"tags" : "Element,Software System",
"name" : "Czech National Open Data Catalog (NODC)",
"description" : "Stores and presents metadata records about data sets and harvests meta data from local open data catalogs.",
"relationships" : [ {
"id" : "10",
"tags" : "Relationship",
"sourceId" : "1",
"destinationId" : "2",
"description" : "Harvests metada records from",
"technology" : "HTTPS"
}, {
"id" : "11",
"tags" : "Relationship",
"sourceId" : "1",
"destinationId" : "3",
"description" : "Uses to read locations of registered local open data catalogs",
"technology" : "HTTPS"
} ],
"location" : "Unspecified"
}, {
"id" : "4",
"tags" : "Element,Software System",
"name" : "Statistical Service Layer for NODC",
"description" : "Provides predefined statistics based on the metadata stored in NODC.",
"relationships" : [ {
"id" : "13",
"tags" : "Relationship",
"sourceId" : "4",
"destinationId" : "1",
"description" : "Gets statistics about published datasets"
} ],
"location" : "Unspecified"
}, {
"id" : "3",
"tags" : "Element,Software System,Existing System",
"name" : "Registry of local open data catalogs",
"description" : "SPARQL endpoint for reading locations of registered local open data catalogs which need to be harvested.",
"location" : "Unspecified"
}, {
"id" : "2",
"tags" : "Element,Software System,Existing System",
"name" : "Local Open Data Catalog",
"description" : "Stores and presents metadata records about data sets and harvests meta data from local open data catalogs.",
"location" : "Unspecified"
}, {
"id" : "5",
"tags" : "Element,Software System,Existing System",
"name" : "Government Reporting system",
"description" : "Reports on current state of individual government organizations.",
"relationships" : [ {
"id" : "12",
"tags" : "Relationship",
"sourceId" : "5",
"destinationId" : "4",
"description" : "Gets statistics about datasets published by individual institutions"
} ],
"location" : "Unspecified"
} ]
},
"documentation" : { },
"views" : {
"systemLandscapeViews" : [ {
"description" : "NODC_SystemLandscape_View",
"key" : "nodc",
"dimensions" : {
"width" : 3234,
"height" : 2004
},
"enterpriseBoundaryVisible" : true,
"elements" : [ {
"id" : "1",
"x" : 1288,
"y" : 804
}, {
"id" : "2",
"x" : 2163,
"y" : 359
}, {
"id" : "3",
"x" : 1278,
"y" : 199
}, {
"id" : "4",
"x" : 1283,
"y" : 1419
}, {
"id" : "5",
"x" : 2198,
"y" : 1504
}, {
"id" : "6",
"x" : 199,
"y" : 725
}, {
"id" : "7",
"x" : 2633,
"y" : 819
} ],
"relationships" : [ {
"id" : "13"
}, {
"id" : "11"
}, {
"id" : "12"
}, {
"id" : "8"
}, {
"id" : "10"
}, {
"id" : "9"
} ]
} ],
"configuration" : {
"branding" : { },
"styles" : {
"elements" : [ {
"tag" : "Software System",
"background" : "#32cd32",
"color" : "#ffffff"
}, {
"tag" : "Container",
"background" : "#63cd32",
"color" : "#ffffff"
}, {
"tag" : "Component",
"background" : "#92cd32",
"color" : "#ffffff"
}, {
"tag" : "Existing System",
"background" : "#999999",
"color" : "#ffffff"
}, {
"tag" : "Web Front-End",
"shape" : "WebBrowser"
}, {
"tag" : "Infrastructure",
"shape" : "Pipe"
}, {
"tag" : "Logic",
"shape" : "Component"
}, {
"tag" : "Model",
"shape" : "RoundedBox"
}, {
"tag" : "Person",
"shape" : "Person"
}, {
"tag" : "Public",
"background" : "#999999",
"color" : "#ffffff"
}, {
"tag" : "Gov",
"background" : "#006400",
"color" : "#ffffff"
} ]
},
"terminology" : { },
"lastSavedView" : "nodc"
}
}
}
\ No newline at end of file
This diff is collapsed.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment