@startuml hide stereotype skinparam nodesep 6 skinparam ranksep 10 skinparam component { backgroundColor<> Green backgroundColor<> Orange backgroundColor<> LightYellow backgroundColor<> LightGrey backgroundColor<> Khaki backgroundColor<> Grey backgroundColor<> LightGrey } skinparam rectangle { backgroundColor<> Green backgroundColor<> Orange backgroundColor<> LightYellow backgroundColor<> LightGrey backgroundColor<> Khaki backgroundColor<> Grey backgroundColor<> LightGrey } skinparam node { backgroundColor<> Green backgroundColor<> Orange backgroundColor<> LightYellow backgroundColor<> LightGrey backgroundColor<> Khaki backgroundColor<> Grey backgroundColor<> LightGrey } title ** OSD Multi Data Source Client Management Architecture ** node "Dashboards" as cluster { rectangle "Legend" { rectangle "New" as new <> rectangle "Modified" as modify <> rectangle "Existing" as existing <> rectangle "External" as external <> new -[hidden]right- modify modify -[hidden]right- existing existing -[hidden]right- external } rectangle "Other Plugins" <> { rectangle "visualization" as viz <> { } rectangle "Alerting or other" as a <> { } } rectangle "Data Plugin" <> as dp { rectangle "Search Module" as sm <> { rectangle "Search Source" <> as source { } rectangle "Search Strategy" as strategy <> { } } interface "DataPluginStart" as dps } rectangle "OpenSearch Data Source Plugin" as ods <> { component "DataSource Service" as ds interface "PluginSetUp" as dsps component "Crypto Service" as cs } rectangle "Core" <> as core { rectangle "opensearch service" as os_service <> { component "internal/scoped client" as ic <> interface "ServiceStart" as osss } interface "CoreStart" as core_start rectangle "saved object service" as sos <> { interface "ServiceStart" as soss } interface "CoreRouteHandlerContext" as cc <> } ds --> es: query source -> strategy: call strategy --> cc: get datasource client viz --> dps: speical viz types viz --> source dps --> sm sos --> os: get saved objects core_start --> cc core_start <.. a: get client a ..> dps a ...> cc: get client core_start <-- osss: register osss <-- soss: depends ic --> os: query ds -> cs: decrypt credential dsps ---> cc: register dp --[hidden]-- ods rectangle "Default OpenSearch" <> as os { } rectangle "Datasource(OpenSearch)" <> as es { } } @enduml