-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcoupling.html
More file actions
160 lines (155 loc) · 56.5 KB
/
coupling.html
File metadata and controls
160 lines (155 loc) · 56.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Coupling Report: ../P24287-Hybrid-Cloud-PaC</title><style>body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
line-height: 1.6;
color: #333;
margin: 0;
padding: 20px;
background-color: #f4f7f6;
}
h1 {
color: #0056b3; /* Darker blue for main title */
text-align: center;
margin-bottom: 30px;
}
/* Base table styling */
.sortable-table {
border-collapse: collapse;
width: 95%; /* More responsive width */
margin: 20px auto; /* Centered with some margin */
box-shadow: 0 2px 15px rgba(0,0,0,0.1); /* Subtle shadow for depth */
font-size: 0.9em; /* Slightly smaller font for more content */
}
.sortable-table caption {
caption-side: top;
text-align: left;
font-size: 1.2em;
font-weight: bold;
padding: 10px;
color: #333;
}
.sortable-table th, .sortable-table td {
border: 1px solid #ddd;
padding: 10px; /* Increased padding for better readability */
text-align: left;
min-width: 80px; /* Minimum width for cells */
}
/* Ensure th specific styling is for sortable-header if it needs to be */
.sortable-table th.sortable-header {
background-color: #007bff; /* Bootstrap primary blue */
color: white;
cursor: pointer;
position: relative; /* For positioning sort indicators */
padding-right: 30px; /* More space for sort indicators */
}
.sortable-table th.sortable-header:hover {
background-color: #0056b3; /* Darker blue on hover */
}
/* Non-sortable headers, if any, might need their own simpler style */
.sortable-table th:not(.sortable-header) {
background-color: #007bff;
color: white;
font-weight: bold; /* Default th styling */
padding: 10px 12px; /* Consistent padding */
}
.sortable-table tbody tr:nth-child(even) {
background-color: #f9f9f9; /* Zebra striping for rows */
}
.sortable-table tbody tr:hover {
background-color: #f1f1f1; /* Lighter grey on hover for data rows */
}
/* Sort indicators for .sortable-header */
.sortable-header::before, .sortable-header::after {
content: '';
position: absolute;
right: 10px; /* Position within the increased padding */
border: 5px solid transparent;
}
.sortable-header::before { /* Upper arrow for asc */
top: calc(50% - 11px); /* Fine-tuned vertical position */
border-bottom-color: #ccc; /* Default arrow color (points up implies space for asc) */
}
.sortable-header::after { /* Lower arrow for desc */
top: calc(50% - 1px); /* Fine-tuned vertical position */
border-top-color: #ccc; /* Default arrow color (points down implies space for desc) */
}
/* Active sort indicators */
.sortable-header[data-sort-direction="asc"]::before {
border-bottom-color: white; /* Active sort color */
}
.sortable-header[data-sort-direction="desc"]::after {
border-top-color: white; /* Active sort color */
}
/* Styles for metric explanations */
.metric-explanations {
list-style-type: none;
padding: 0;
margin: 20px auto;
width: 95%;
}
.metric-explanations li {
margin-bottom: 8px;
font-size: 0.9em;
line-height: 1.4;
}
.metric-explanations strong {
color: #007bff;
}
/* General cell styling for metrics */
td.metric-cell {
text-align: right;
}</style></head><body><h1>Coupling Report: ../P24287-Hybrid-Cloud-PaC</h1><ul class="metric-explanations"><li><strong>Ce (Efferent Coupling): </strong><span>Number of other components that this component depends on. Higher is generally worse.</span></li><li><strong>Ca (Afferent Coupling): </strong><span>Number of other components that depend on this component. Higher indicates more responsibility, can be good or bad depending on context but often indicates potential impact of changes.</span></li></ul><table class="sortable-table"><caption>Crate Level Coupling</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Crate Name</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca (Afferent)</th></tr></thead><tbody><tr><td>control-plane</td><td style="background-color: hsl(0, 100%, 88%); text-align: right;">30</td><td style="background-color: hsl(120, 100%, 88%); text-align: right;">0</td></tr><tr><td>sapphire_common</td><td style="background-color: hsl(112, 100%, 88%); text-align: right;">2</td><td style="background-color: hsl(0, 100%, 88%); text-align: right;">25</td></tr><tr><td>sapphire-agent</td><td style="background-color: hsl(56, 100%, 88%); text-align: right;">16</td><td style="background-color: hsl(120, 100%, 88%); text-align: right;">0</td></tr><tr><td>sapphire_core</td><td style="background-color: hsl(120, 100%, 88%); text-align: right;">0</td><td style="background-color: hsl(67.2, 100%, 88%); text-align: right;">11</td></tr><tr><td>sapphire_svc_evaluation</td><td style="background-color: hsl(96, 100%, 88%); text-align: right;">6</td><td style="background-color: hsl(110.4, 100%, 88%); text-align: right;">2</td></tr><tr><td>sapphire_build_helper</td><td style="background-color: hsl(100, 100%, 88%); text-align: right;">5</td><td style="background-color: hsl(110.4, 100%, 88%); text-align: right;">2</td></tr><tr><td>sapphire_domain_product_management</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(91.2, 100%, 88%); text-align: right;">6</td></tr><tr><td>sapphire_iface_product_management_grpc</td><td style="background-color: hsl(100, 100%, 88%); text-align: right;">5</td><td style="background-color: hsl(110.4, 100%, 88%); text-align: right;">2</td></tr><tr><td>sapphire_sdk</td><td style="background-color: hsl(112, 100%, 88%); text-align: right;">2</td><td style="background-color: hsl(96, 100%, 88%); text-align: right;">5</td></tr><tr><td>sapphire_svc_product_management</td><td style="background-color: hsl(100, 100%, 88%); text-align: right;">5</td><td style="background-color: hsl(110.4, 100%, 88%); text-align: right;">2</td></tr><tr><td>sapphire_iface_cedar_entity_grpc</td><td style="background-color: hsl(112, 100%, 88%); text-align: right;">2</td><td style="background-color: hsl(105.6, 100%, 88%); text-align: right;">3</td></tr><tr><td>sapphire_iface_evaluation_grpc</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(100.8, 100%, 88%); text-align: right;">4</td></tr><tr><td>sapphire_iface_policy_management_grpc</td><td style="background-color: hsl(112, 100%, 88%); text-align: right;">2</td><td style="background-color: hsl(105.6, 100%, 88%); text-align: right;">3</td></tr><tr><td>sapphire_repo_product_management_cockroachdb</td><td style="background-color: hsl(108, 100%, 88%); text-align: right;">3</td><td style="background-color: hsl(110.4, 100%, 88%); text-align: right;">2</td></tr><tr><td>sapphire_cedar_entity_surrealdb</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(105.6, 100%, 88%); text-align: right;">3</td></tr><tr><td>sapphire_evaluator_cedar</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(105.6, 100%, 88%); text-align: right;">3</td></tr><tr><td>sapphire_evaluator_rego</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(105.6, 100%, 88%); text-align: right;">3</td></tr><tr><td>sapphire_health_svc</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(105.6, 100%, 88%); text-align: right;">3</td></tr><tr><td>sapphire_iface_decision_log_grpc</td><td style="background-color: hsl(112, 100%, 88%); text-align: right;">2</td><td style="background-color: hsl(110.4, 100%, 88%); text-align: right;">2</td></tr><tr><td>sapphire_iface_health_grpc</td><td style="background-color: hsl(112, 100%, 88%); text-align: right;">2</td><td style="background-color: hsl(110.4, 100%, 88%); text-align: right;">2</td></tr><tr><td>sapphire_repo_policy_management_surrealdb</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(105.6, 100%, 88%); text-align: right;">3</td></tr><tr><td>sapphire_repo_reporting_cockroachdb</td><td style="background-color: hsl(108, 100%, 88%); text-align: right;">3</td><td style="background-color: hsl(115.19999999999999, 100%, 88%); text-align: right;">1</td></tr><tr><td>in_memory_event_bus</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(110.4, 100%, 88%); text-align: right;">2</td></tr><tr><td>postgres_event_store</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(110.4, 100%, 88%); text-align: right;">2</td></tr><tr><td>sapphire_iface_reporting_grpc</td><td style="background-color: hsl(112, 100%, 88%); text-align: right;">2</td><td style="background-color: hsl(115.19999999999999, 100%, 88%); text-align: right;">1</td></tr><tr><td>sapphire_observability</td><td style="background-color: hsl(120, 100%, 88%); text-align: right;">0</td><td style="background-color: hsl(105.6, 100%, 88%); text-align: right;">3</td></tr><tr><td>sapphire_svc_reporting</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(110.4, 100%, 88%); text-align: right;">2</td></tr><tr><td>sapphire_iface_evaluation_cli</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(115.19999999999999, 100%, 88%); text-align: right;">1</td></tr><tr><td>sapphire_iface_evaluation_rest</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(115.19999999999999, 100%, 88%); text-align: right;">1</td></tr><tr><td>sapphire_iface_policy_bundle_cli</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(115.19999999999999, 100%, 88%); text-align: right;">1</td></tr><tr><td>sapphire_repo_cedar_entity_cockroachdb</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(115.19999999999999, 100%, 88%); text-align: right;">1</td></tr><tr><td>sapphire_repo_decision_log_cockroachdb</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(115.19999999999999, 100%, 88%); text-align: right;">1</td></tr><tr><td>sapphire_repo_policy_management_cockroachdb</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(115.19999999999999, 100%, 88%); text-align: right;">1</td></tr><tr><td>sapphire_svc_policy_management</td><td style="background-color: hsl(116, 100%, 88%); text-align: right;">1</td><td style="background-color: hsl(115.19999999999999, 100%, 88%); text-align: right;">1</td></tr><tr><td>k8s-sidecar-injector</td><td style="background-color: hsl(120, 100%, 88%); text-align: right;">0</td><td style="background-color: hsl(120, 100%, 88%); text-align: right;">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: control-plane</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> config</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> interfaces</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> seed_cedar_entities</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> seed_policies</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> seed_products</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> services</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> interfaces::grpc</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> interfaces::kafka</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> interfaces::rest</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> services/git_watcher_service::git_watcher</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> services/git_watcher_service::repo_configuration</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> services/git_watcher_service::utils</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> services::cedar_entity_service</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> services::git_watcher_service</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> services::product_event_handler</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_common</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> config</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> error</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> events</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> utils</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> events::create_entities_event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> events::create_entity_event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> events::dead_letter_event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> events::decision_log_created_event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> events::delete_entity_event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> events::update_entity_event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/evaluation::evaluation_input</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/evaluation::evaluation_output</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy/cedar::cedar_policy</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy/cedar::type_mappings</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy/nebula/azure::azure_policy</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy/nebula/azure::azure_policy_metadata</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy/nebula/azure::type_mappings</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy/nebula/gcp::gcp_policy</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy/nebula/gcp::gcp_policy_metadata</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy/nebula/gcp::type_mappings</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy/nebula::azure</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy/nebula::gcp</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy/nebula::testing_strategy</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy::cedar</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy::cia</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy::languages</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy::lifespan</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy::metadata</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy::nebula</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models/policy::policy_model</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models::bundle</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models::decision_log</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models::evaluation</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models::policy</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models::policy_report</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models::product_report</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::cedar_entity_repository</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::cedar_entity_service_trait</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::evaluation_service_trait</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::policy_management_service_trait</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::policy_repository</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::reporting_repository</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> utils::cloudevents_header_injector</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> utils::kafka</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> utils::runtime</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> utils::tonic_header_injector</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire-agent</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> clients::cedar_entity</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> clients::policy_management</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> clients</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> command_handlers</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> config</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> interfaces</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> parsing</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> services</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> interfaces::grpc</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> interfaces::kafka</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> services::cedar_entity_service</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_core</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> config</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> utils</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> models::product_code</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::aggregate</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::command</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::event_bus</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::event_producer</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::event_store</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traits::repository</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> utils::cloudevents_header_injector</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> utils::kafka</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> utils::kafka_producer</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> utils::runtime</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> utils::tonic_header_injector</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_svc_evaluation</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> evaluation_service</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_build_helper</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_domain_product_management</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/commands::product_add_repository_configuration_command</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/commands::product_delete_command</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/commands::product_onboard_command</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/commands::product_remove_repository_configuration_command</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/commands::product_update_command</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/events::product_onboarded_event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/events::product_soft_deleted_event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/events::product_updated_event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/events::repository_configuration_added_event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/events::repository_configuration_removed_event</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/models::product</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/models::product_builder</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/models::product_report</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product/models::product_repository_configuration</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product::commands</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product::errors</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product::events</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product::models</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> product::product_repository</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_iface_product_management_grpc</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> server</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> type_mappings</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_sdk</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_svc_product_management</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> error</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> service</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_iface_cedar_entity_grpc</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> cedar_entity_grpc_interface</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> type_mappings</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_iface_evaluation_grpc</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> evaluation_grpc_interface</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> type_mappings</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_iface_policy_management_grpc</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> policy_management_grpc_interface</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> type_mappings</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_repo_product_management_cockroachdb</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> error</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> repo</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_cedar_entity_surrealdb</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> record</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_evaluator_cedar</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> cedar</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_evaluator_rego</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> rego</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_health_svc</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> health_service</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_iface_decision_log_grpc</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> decision_log_grpc_interface</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> type_mappings</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_iface_health_grpc</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_repo_policy_management_surrealdb</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> records</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> repo_surrealdb</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_repo_reporting_cockroachdb</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: in_memory_event_bus</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: postgres_event_store</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_iface_reporting_grpc</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> reporting_grpc_interface</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_observability</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> logs</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> observability</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traces</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics/http_metrics::http_server</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics/system_metrics::disk</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics/system_metrics::general</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics/system_metrics::memory</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics/system_metrics::network</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics/system_metrics::process</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics/system_metrics::processor</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics::http_metric_layer</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics::http_metrics</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics::process_metrics</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> metrics::system_metrics</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traces::json_or_not</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> traces::otel_resource_attributes</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_svc_reporting</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> reporting_service</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_iface_evaluation_cli</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> languages</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_iface_evaluation_rest</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> evaluation_rest_interface</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_iface_policy_bundle_cli</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_repo_cedar_entity_cockroachdb</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_repo_decision_log_cockroachdb</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_repo_policy_management_cockroachdb</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: sapphire_svc_policy_management</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr><tr><td> policy_management_service</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><table class="sortable-table"><caption>Module Level Coupling: k8s-sidecar-injector</caption><thead><tr><th class="sortable-header" data-column-index="0" data-sort-type="string">Module Path</th><th class="sortable-header" data-column-index="1" data-sort-type="number">Ce_m (Efferent)</th><th class="sortable-header" data-column-index="2" data-sort-type="number">Ca_m (Afferent)</th></tr></thead><tbody><tr><td> crate_root</td><td style="background-color: hsl(120, 100%, 80%);">0</td><td style="background-color: hsl(120, 100%, 80%);">0</td></tr></tbody></table><script>document.addEventListener('DOMContentLoaded', function() {
const getCellValue = (tr, idx, type) => {
const cellContent = tr.children[idx].innerText || tr.children[idx].textContent;
if (type === 'number') {
const num = parseFloat(cellContent.replace(/[%$,]/g, ''));
return isNaN(num) ? -Infinity : num;
}
return cellContent.trim().toLowerCase();
};
const comparer = (idx, asc, type) => (a, b) => {
const vA = getCellValue(a, idx, type);
const vB = getCellValue(b, idx, type);
let comparison = 0;
if (type === 'number') {
comparison = vA - vB;
} else {
comparison = vA.toString().localeCompare(vB.toString());
}
return asc ? comparison : -comparison;
};
document.querySelectorAll('.sortable-table .sortable-header').forEach(th => {
th.addEventListener('click', (() => {
const table = th.closest('table');
const tbody = table.querySelector('tbody');
if (!tbody) return;
const columnIndex = parseInt(th.dataset.columnIndex);
const sortType = th.dataset.sortType || 'string';
let currentAsc = th.classList.contains('sort-asc');
let newAsc;
table.querySelectorAll('.sortable-header').forEach(otherTh => {
if (otherTh === th) {
if (th.dataset.sortDirection && th.dataset.sortDirection !== 'none') {
newAsc = !currentAsc;
th.dataset.sortDirection = newAsc ? 'asc' : 'desc';
} else {
newAsc = true;
th.dataset.sortDirection = 'asc';
}
th.classList.toggle('sort-asc', newAsc);
th.classList.toggle('sort-desc', !newAsc);
} else {
otherTh.classList.remove('sort-asc', 'sort-desc');
otherTh.dataset.sortDirection = 'none';
}
});
if (newAsc === undefined) { // Should not happen if th is the clicked element
newAsc = true;
th.dataset.sortDirection = 'asc';
th.classList.add('sort-asc');
}
Array.from(tbody.querySelectorAll('tr'))
.sort(comparer(columnIndex, newAsc, sortType))
.forEach(tr => tbody.appendChild(tr));
}));
});
});</script></body></html>