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
......@@ -3,10 +3,10 @@
"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-10-24T19:26:14Z",
"lastModifiedDate" : "2021-12-01T17:10:13Z",
"lastModifiedAgent" : "structurizr-web/2502",
"properties" : {
"structurizr.dsl" : "d29ya3NwYWNlIGV4dGVuZHMgc2FtcGxld29ya3NwYWNlMDkuZHNsIHsKCn0K"
"structurizr.dsl" : "d29ya3NwYWNlIGV4dGVuZHMgc2FtcGxld29ya3NwYWNlMTYuZHNsIHsKCn0K"
},
"configuration" : { },
"model" : {
......@@ -16,178 +16,234 @@
"name" : "Consumer",
"description" : "A person from the public who searches for data sets and accesses them for various purposes.",
"relationships" : [ {
"id" : "23",
"id" : "22",
"tags" : "Relationship",
"sourceId" : "18",
"destinationId" : "2",
"description" : "Searches for metadata records and views their details with",
"destinationId" : "1",
"description" : "Searches for metadata records in",
"technology" : "HTTPS"
}, {
"id" : "20",
"id" : "27",
"tags" : "Relationship",
"sourceId" : "18",
"destinationId" : "1",
"description" : "Searchers for metadata records in",
"destinationId" : "2",
"description" : "Searches for metadata records and views their details with",
"technology" : "HTTPS"
} ],
"location" : "Unspecified"
}, {
"id" : "20",
"tags" : "Element,Person,Admin",
"name" : "NODC admin",
"description" : "A person who administers NODC",
"relationships" : [ {
"id" : "24",
"tags" : "Relationship",
"sourceId" : "20",
"destinationId" : "1",
"description" : "Administers"
} ],
"location" : "Unspecified"
}, {
"id" : "21",
"tags" : "Element,Person,Admin",
"name" : "LODC admin",
"description" : "A person who administers LODC",
"relationships" : [ {
"id" : "25",
"tags" : "Relationship",
"sourceId" : "21",
"destinationId" : "16",
"description" : "Administers"
} ],
"location" : "Unspecified"
}, {
"id" : "19",
"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" : "24",
"id" : "23",
"tags" : "Relationship",
"sourceId" : "19",
"destinationId" : "2",
"description" : "Searches for metadata records and views their details with",
"destinationId" : "1",
"description" : "Searches for metadata records in",
"technology" : "HTTPS"
}, {
"id" : "21",
"id" : "28",
"tags" : "Relationship",
"sourceId" : "19",
"destinationId" : "1",
"description" : "Searchers for metadata records in",
"destinationId" : "2",
"description" : "Searches for metadata records and views their details with",
"technology" : "HTTPS"
} ],
"location" : "Unspecified"
} ],
"softwareSystems" : [ {
"id" : "16",
"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" : "17",
"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" : "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" : "22",
"id" : "41",
"tags" : "Relationship",
"sourceId" : "1",
"destinationId" : "16",
"description" : "Harvests metada records from",
"technology" : "HTTPS"
"destinationId" : "21",
"description" : "Notifies about suspicious LODC content",
"technology" : "e-mail"
}, {
"id" : "32",
"id" : "36",
"tags" : "Relationship",
"sourceId" : "1",
"destinationId" : "17",
"description" : "Uses to read locations of registered local open data catalogs",
"technology" : "HTTPS"
}, {
"id" : "39",
"tags" : "Relationship",
"sourceId" : "1",
"destinationId" : "20",
"description" : "Notifies about suspicious LODC content",
"technology" : "e-mail"
}, {
"id" : "26",
"tags" : "Relationship",
"sourceId" : "1",
"destinationId" : "16",
"description" : "Harvests metada records from",
"technology" : "DCAT-AP on HTTPS"
} ],
"location" : "Unspecified",
"containers" : [ {
"id" : "13",
"tags" : "Element,Container",
"name" : "Metadata Index",
"description" : "Index for fast searching in metadata records.",
"technology" : "Apache SOLR configuration and schema"
}, {
"id" : "2",
"tags" : "Element,Container,Web Front-End",
"name" : "NODC Web Front-end",
"description" : "Provides all functionality for browsing and viewing metadata records to open data consumers.",
"relationships" : [ {
"id" : "34",
"id" : "42",
"tags" : "Relationship",
"sourceId" : "2",
"destinationId" : "4",
"description" : "Makes API calls to",
"technology" : "JSON/HTTPS"
}, {
"id" : "43",
"tags" : "Relationship",
"sourceId" : "2",
"destinationId" : "5",
"description" : "Makes API calls to",
"technology" : "JSON/HTTPS"
}, {
"id" : "25",
"id" : "29",
"tags" : "Relationship",
"sourceId" : "2",
"destinationId" : "3",
"description" : "Uses to deliver functionality",
"technology" : "HTTPS"
}, {
"id" : "33",
"tags" : "Relationship",
"sourceId" : "2",
"destinationId" : "4",
"description" : "Makes API calls to",
"technology" : "JSON/HTTPS"
} ],
"technology" : "TypeScript"
}, {
"id" : "13",
"tags" : "Element,Container",
"name" : "Metadata Index",
"description" : "Index for fast searching in metadata records.",
"technology" : "Apache SOLR configuration and schema"
}, {
"id" : "14",
"tags" : "Element,Container",
"name" : "Metadata Storage",
"description" : "Storage of metadata records.",
"technology" : "Apache CouchDB database"
}, {
"id" : "15",
"tags" : "Element,Container",
"name" : "Metadata Harvestor",
"description" : "Harvests metadata records from local open data catalogs.",
"relationships" : [ {
"id" : "31",
"id" : "35",
"tags" : "Relationship",
"sourceId" : "15",
"destinationId" : "17",
"description" : "Uses to read locations of registered local open data catalogs",
"technology" : "HTTPS"
}, {
"id" : "30",
"id" : "37",
"tags" : "Relationship",
"sourceId" : "15",
"destinationId" : "14",
"description" : "Uses to persists harvested metadata records. All records are always replaced",
"destinationId" : "17",
"description" : "Uses to log suspicious LODC content security event occurence",
"technology" : "HTTPS"
}, {
"id" : "28",
"id" : "32",
"tags" : "Relationship",
"sourceId" : "15",
"destinationId" : "16",
"description" : "Harvests metadata records from",
"technology" : "HTTPS"
"technology" : "DCAT-AP on HTTPS"
}, {
"id" : "29",
"id" : "33",
"tags" : "Relationship",
"sourceId" : "15",
"destinationId" : "13",
"description" : "Uses to reset metadata records index. The whole index is always replaced",
"technology" : "HTTPS"
}, {
"id" : "40",
"tags" : "Relationship",
"sourceId" : "15",
"destinationId" : "21",
"description" : "Notifies about suspicious LODC content",
"technology" : "e-mail"
}, {
"id" : "38",
"tags" : "Relationship",
"sourceId" : "15",
"destinationId" : "20",
"description" : "Notifies about suspicious LODC content",
"technology" : "e-mail"
}, {
"id" : "34",
"tags" : "Relationship",
"sourceId" : "15",
"destinationId" : "14",
"description" : "Uses to persists harvested metadata records. All records are always replaced",
"technology" : "HTTPS"
} ],
"technology" : "LinkedPipes ETL pipeline"
}, {
"id" : "14",
"tags" : "Element,Container",
"name" : "Metadata Storage",
"description" : "Storage of metadata records.",
"technology" : "Apache CouchDB database"
}, {
"id" : "3",
"tags" : "Element,Container",
"name" : "NODC Server",
"description" : "Implements all business functionality for browsing and viewing metadata records and provides it via API.",
"relationships" : [ {
"id" : "26",
"id" : "31",
"tags" : "Relationship",
"sourceId" : "3",
"destinationId" : "13",
"description" : "Uses for fast retrieval of metadata records lists",
"destinationId" : "14",
"description" : "Uses for fast retrieval of metadata records details",
"technology" : "HTTPS"
}, {
"id" : "27",
"id" : "30",
"tags" : "Relationship",
"sourceId" : "3",
"destinationId" : "14",
"description" : "Uses for fast retrieval of metadata records details",
"destinationId" : "13",
"description" : "Uses for fast retrieval of metadata records lists",
"technology" : "HTTPS"
} ],
"technology" : "Node.js",
"components" : [ {
"id" : "12",
"tags" : "Element,Component,Model",
"name" : "Distribution Model",
"description" : "Internal domain model of distribution metadata.",
"group" : "Domain Model",
"id" : "6",
"tags" : "Element,Component,Infrastructure",
"name" : "Metadata Index Gateway",
"description" : "Provides access to a metadata records index.",
"group" : "Infrastructure",
"size" : 0