source_monitor 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.claude/skills/sm-architecture/SKILL.md +233 -0
- data/.claude/skills/sm-architecture/reference/extraction-patterns.md +192 -0
- data/.claude/skills/sm-architecture/reference/module-map.md +194 -0
- data/.claude/skills/sm-configuration-setting/SKILL.md +264 -0
- data/.claude/skills/sm-configuration-setting/reference/settings-catalog.md +248 -0
- data/.claude/skills/sm-configuration-setting/reference/settings-pattern.md +297 -0
- data/.claude/skills/sm-configure/SKILL.md +153 -0
- data/.claude/skills/sm-configure/reference/configuration-reference.md +321 -0
- data/.claude/skills/sm-dashboard-widget/SKILL.md +344 -0
- data/.claude/skills/sm-dashboard-widget/reference/dashboard-patterns.md +304 -0
- data/.claude/skills/sm-domain-model/SKILL.md +188 -0
- data/.claude/skills/sm-domain-model/reference/model-graph.md +114 -0
- data/.claude/skills/sm-domain-model/reference/table-structure.md +348 -0
- data/.claude/skills/sm-engine-migration/SKILL.md +395 -0
- data/.claude/skills/sm-engine-migration/reference/migration-conventions.md +255 -0
- data/.claude/skills/sm-engine-test/SKILL.md +302 -0
- data/.claude/skills/sm-engine-test/reference/test-helpers.md +259 -0
- data/.claude/skills/sm-engine-test/reference/test-patterns.md +411 -0
- data/.claude/skills/sm-event-handler/SKILL.md +265 -0
- data/.claude/skills/sm-event-handler/reference/events-api.md +229 -0
- data/.claude/skills/sm-health-rule/SKILL.md +327 -0
- data/.claude/skills/sm-health-rule/reference/health-system.md +269 -0
- data/.claude/skills/sm-host-setup/SKILL.md +223 -0
- data/.claude/skills/sm-host-setup/reference/initializer-template.md +195 -0
- data/.claude/skills/sm-host-setup/reference/setup-checklist.md +134 -0
- data/.claude/skills/sm-job/SKILL.md +263 -0
- data/.claude/skills/sm-job/reference/job-conventions.md +245 -0
- data/.claude/skills/sm-model-extension/SKILL.md +287 -0
- data/.claude/skills/sm-model-extension/reference/extension-api.md +317 -0
- data/.claude/skills/sm-pipeline-stage/SKILL.md +254 -0
- data/.claude/skills/sm-pipeline-stage/reference/completion-handlers.md +152 -0
- data/.claude/skills/sm-pipeline-stage/reference/entry-processing.md +191 -0
- data/.claude/skills/sm-pipeline-stage/reference/feed-fetcher-architecture.md +198 -0
- data/.claude/skills/sm-scraper-adapter/SKILL.md +284 -0
- data/.claude/skills/sm-scraper-adapter/reference/adapter-contract.md +167 -0
- data/.claude/skills/sm-scraper-adapter/reference/example-adapter.md +274 -0
- data/.vbw-planning/.notification-log.jsonl +102 -0
- data/.vbw-planning/.session-log.jsonl +505 -0
- data/AGENTS.md +20 -57
- data/CHANGELOG.md +19 -0
- data/CLAUDE.md +44 -1
- data/CONTRIBUTING.md +5 -5
- data/Gemfile.lock +20 -21
- data/README.md +18 -5
- data/VERSION +1 -0
- data/docs/deployment.md +1 -1
- data/docs/setup.md +4 -4
- data/lib/source_monitor/setup/skills_installer.rb +94 -0
- data/lib/source_monitor/setup/workflow.rb +17 -2
- data/lib/source_monitor/version.rb +1 -1
- data/lib/tasks/source_monitor_setup.rake +58 -0
- data/source_monitor.gemspec +1 -0
- metadata +39 -1
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
# SourceMonitor Table Structure
|
|
2
|
+
|
|
3
|
+
All tables use a configurable prefix (default: `sourcemon_`).
|
|
4
|
+
|
|
5
|
+
## sourcemon_sources
|
|
6
|
+
|
|
7
|
+
Core feed source configuration and state.
|
|
8
|
+
|
|
9
|
+
| Column | Type | Null | Default | Notes |
|
|
10
|
+
|--------|------|------|---------|-------|
|
|
11
|
+
| id | bigint | NO | auto | PK |
|
|
12
|
+
| name | string | NO | | Feed display name |
|
|
13
|
+
| feed_url | string | NO | | RSS/Atom feed URL |
|
|
14
|
+
| website_url | string | YES | | Source website URL |
|
|
15
|
+
| active | boolean | NO | true | Enable/disable toggle |
|
|
16
|
+
| feed_format | string | YES | | Detected format (rss, atom, etc.) |
|
|
17
|
+
| fetch_interval_minutes | integer | NO | 360 | Fetch frequency (was hours, migrated) |
|
|
18
|
+
| next_fetch_at | datetime | YES | | Next scheduled fetch time |
|
|
19
|
+
| last_fetched_at | datetime | YES | | Last fetch attempt time |
|
|
20
|
+
| last_fetch_started_at | datetime | YES | | When current fetch started |
|
|
21
|
+
| last_fetch_duration_ms | integer | YES | | Last fetch duration |
|
|
22
|
+
| last_http_status | integer | YES | | Last HTTP response status |
|
|
23
|
+
| last_error | text | YES | | Last error message |
|
|
24
|
+
| last_error_at | datetime | YES | | Last error timestamp |
|
|
25
|
+
| etag | string | YES | | HTTP ETag for conditional requests |
|
|
26
|
+
| last_modified | datetime | YES | | HTTP Last-Modified for conditional requests |
|
|
27
|
+
| failure_count | integer | NO | 0 | Consecutive failure count |
|
|
28
|
+
| backoff_until | datetime | YES | | Backoff expiry time |
|
|
29
|
+
| items_count | integer | NO | 0 | Counter cache (active items) |
|
|
30
|
+
| scraping_enabled | boolean | NO | false | Content scraping toggle |
|
|
31
|
+
| auto_scrape | boolean | NO | false | Auto-scrape new items |
|
|
32
|
+
| scrape_settings | jsonb | NO | {} | Scraper configuration |
|
|
33
|
+
| scraper_adapter | string | NO | "readability" | Scraper adapter name |
|
|
34
|
+
| requires_javascript | boolean | NO | false | JS rendering needed |
|
|
35
|
+
| custom_headers | jsonb | NO | {} | Custom HTTP headers |
|
|
36
|
+
| items_retention_days | integer | YES | | Item retention period |
|
|
37
|
+
| max_items | integer | YES | | Maximum items to keep |
|
|
38
|
+
| metadata | jsonb | NO | {} | Extensible metadata (last_feed_signature, etc.) |
|
|
39
|
+
| type | string | YES | | STI column (unused currently) |
|
|
40
|
+
| fetch_status | string | NO | "idle" | idle/queued/fetching/failed/invalid |
|
|
41
|
+
| fetch_retry_attempt | integer | NO | 0 | Current retry attempt number |
|
|
42
|
+
| fetch_circuit_opened_at | datetime | YES | | Circuit breaker open time |
|
|
43
|
+
| fetch_circuit_until | datetime | YES | | Circuit breaker expiry |
|
|
44
|
+
| adaptive_fetching_enabled | boolean | NO | true | Adaptive interval toggle |
|
|
45
|
+
| feed_content_readability_enabled | boolean | NO | false | Process feed content through readability |
|
|
46
|
+
| rolling_success_rate | decimal(5,4) | YES | | Rolling success rate (0.0-1.0) |
|
|
47
|
+
| health_status | string | NO | "healthy" | Health status string |
|
|
48
|
+
| health_status_changed_at | datetime | YES | | Last health status change |
|
|
49
|
+
| auto_paused_at | datetime | YES | | When source was auto-paused |
|
|
50
|
+
| auto_paused_until | datetime | YES | | Auto-pause expiry |
|
|
51
|
+
| health_auto_pause_threshold | decimal(5,4) | YES | | Custom pause threshold (0.0-1.0) |
|
|
52
|
+
| created_at | datetime | NO | | |
|
|
53
|
+
| updated_at | datetime | NO | | |
|
|
54
|
+
|
|
55
|
+
### Indexes
|
|
56
|
+
| Index | Columns | Options |
|
|
57
|
+
|-------|---------|---------|
|
|
58
|
+
| unique | feed_url | |
|
|
59
|
+
| btree | active | |
|
|
60
|
+
| btree | next_fetch_at | |
|
|
61
|
+
| btree | fetch_status | |
|
|
62
|
+
| btree | type | |
|
|
63
|
+
| btree | created_at | |
|
|
64
|
+
| btree | health_status | |
|
|
65
|
+
| btree | auto_paused_until | |
|
|
66
|
+
| btree | fetch_retry_attempt | |
|
|
67
|
+
| btree | fetch_circuit_until | |
|
|
68
|
+
| partial | [active, next_fetch_at] | WHERE active = true |
|
|
69
|
+
| partial | failure_count | WHERE failure_count > 0 |
|
|
70
|
+
|
|
71
|
+
### Constraints
|
|
72
|
+
| Constraint | Expression |
|
|
73
|
+
|------------|------------|
|
|
74
|
+
| check_fetch_status_values | `fetch_status IN ('idle','queued','fetching','failed','invalid')` |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## sourcemon_items
|
|
79
|
+
|
|
80
|
+
Individual feed entries/articles.
|
|
81
|
+
|
|
82
|
+
| Column | Type | Null | Default | Notes |
|
|
83
|
+
|--------|------|------|---------|-------|
|
|
84
|
+
| id | bigint | NO | auto | PK |
|
|
85
|
+
| source_id | bigint | NO | | FK -> sourcemon_sources |
|
|
86
|
+
| guid | string | NO | | Unique entry identifier |
|
|
87
|
+
| content_fingerprint | string | YES | | SHA256 content hash |
|
|
88
|
+
| title | string | YES | | Entry title |
|
|
89
|
+
| url | string | NO | | Entry URL |
|
|
90
|
+
| canonical_url | string | YES | | Canonical URL |
|
|
91
|
+
| author | string | YES | | Primary author |
|
|
92
|
+
| authors | jsonb | NO | [] | All authors |
|
|
93
|
+
| summary | text | YES | | Entry summary/excerpt |
|
|
94
|
+
| content | text | YES | | Full entry content |
|
|
95
|
+
| scraped_at | datetime | YES | | When content was scraped |
|
|
96
|
+
| scrape_status | string | YES | | Scrape result status |
|
|
97
|
+
| published_at | datetime | YES | | Publication date |
|
|
98
|
+
| updated_at_source | datetime | YES | | Source's last-modified date |
|
|
99
|
+
| categories | jsonb | NO | [] | Category tags |
|
|
100
|
+
| tags | jsonb | NO | [] | Tags |
|
|
101
|
+
| keywords | jsonb | NO | [] | Keywords |
|
|
102
|
+
| enclosures | jsonb | NO | [] | Media enclosures |
|
|
103
|
+
| media_thumbnail_url | string | YES | | Thumbnail URL |
|
|
104
|
+
| media_content | jsonb | NO | [] | Media content entries |
|
|
105
|
+
| language | string | YES | | Content language |
|
|
106
|
+
| copyright | string | YES | | Copyright notice |
|
|
107
|
+
| comments_url | string | YES | | Comments page URL |
|
|
108
|
+
| comments_count | integer | NO | 0 | Number of comments |
|
|
109
|
+
| metadata | jsonb | NO | {} | Extensible metadata |
|
|
110
|
+
| deleted_at | datetime | YES | | Soft delete timestamp |
|
|
111
|
+
| created_at | datetime | NO | | |
|
|
112
|
+
| updated_at | datetime | NO | | |
|
|
113
|
+
|
|
114
|
+
### Indexes
|
|
115
|
+
| Index | Columns | Options |
|
|
116
|
+
|-------|---------|---------|
|
|
117
|
+
| btree | guid | |
|
|
118
|
+
| btree | content_fingerprint | |
|
|
119
|
+
| btree | url | |
|
|
120
|
+
| btree | scrape_status | |
|
|
121
|
+
| btree | published_at | |
|
|
122
|
+
| btree | deleted_at | |
|
|
123
|
+
| unique | [source_id, guid] | |
|
|
124
|
+
| unique | [source_id, content_fingerprint] | |
|
|
125
|
+
| btree | [source_id, published_at, created_at] | |
|
|
126
|
+
| btree | [source_id, created_at] | |
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## sourcemon_item_contents
|
|
131
|
+
|
|
132
|
+
Scraped content storage (split from items table for performance).
|
|
133
|
+
|
|
134
|
+
| Column | Type | Null | Default | Notes |
|
|
135
|
+
|--------|------|------|---------|-------|
|
|
136
|
+
| id | bigint | NO | auto | PK |
|
|
137
|
+
| item_id | bigint | NO | | FK -> sourcemon_items, unique |
|
|
138
|
+
| scraped_html | text | YES | | Raw scraped HTML |
|
|
139
|
+
| scraped_content | text | YES | | Processed text content |
|
|
140
|
+
| created_at | datetime | NO | | |
|
|
141
|
+
| updated_at | datetime | NO | | |
|
|
142
|
+
|
|
143
|
+
### Indexes
|
|
144
|
+
| Index | Columns | Options |
|
|
145
|
+
|-------|---------|---------|
|
|
146
|
+
| unique | item_id | |
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## sourcemon_fetch_logs
|
|
151
|
+
|
|
152
|
+
Records of feed fetch attempts.
|
|
153
|
+
|
|
154
|
+
| Column | Type | Null | Default | Notes |
|
|
155
|
+
|--------|------|------|---------|-------|
|
|
156
|
+
| id | bigint | NO | auto | PK |
|
|
157
|
+
| source_id | bigint | NO | | FK -> sourcemon_sources |
|
|
158
|
+
| success | boolean | NO | false | Fetch succeeded |
|
|
159
|
+
| items_created | integer | NO | 0 | New items from this fetch |
|
|
160
|
+
| items_updated | integer | NO | 0 | Updated items |
|
|
161
|
+
| items_failed | integer | NO | 0 | Failed items |
|
|
162
|
+
| started_at | datetime | NO | | Fetch start time |
|
|
163
|
+
| completed_at | datetime | YES | | Fetch end time |
|
|
164
|
+
| duration_ms | integer | YES | | Duration in milliseconds |
|
|
165
|
+
| http_status | integer | YES | | HTTP response status |
|
|
166
|
+
| http_response_headers | jsonb | NO | {} | Response headers |
|
|
167
|
+
| error_class | string | YES | | Error class name |
|
|
168
|
+
| error_message | text | YES | | Error message |
|
|
169
|
+
| error_backtrace | text | YES | | Error backtrace (first 20 lines) |
|
|
170
|
+
| feed_size_bytes | integer | YES | | Feed body size |
|
|
171
|
+
| items_in_feed | integer | YES | | Total entries in feed |
|
|
172
|
+
| job_id | string | YES | | ActiveJob ID |
|
|
173
|
+
| metadata | jsonb | NO | {} | Extra metadata (parser, errors) |
|
|
174
|
+
| created_at | datetime | NO | | |
|
|
175
|
+
| updated_at | datetime | NO | | |
|
|
176
|
+
|
|
177
|
+
### Indexes
|
|
178
|
+
| Index | Columns | Options |
|
|
179
|
+
|-------|---------|---------|
|
|
180
|
+
| btree | success | |
|
|
181
|
+
| btree | started_at | |
|
|
182
|
+
| btree | job_id | |
|
|
183
|
+
| btree | created_at | |
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## sourcemon_scrape_logs
|
|
188
|
+
|
|
189
|
+
Records of item content scrape attempts.
|
|
190
|
+
|
|
191
|
+
| Column | Type | Null | Default | Notes |
|
|
192
|
+
|--------|------|------|---------|-------|
|
|
193
|
+
| id | bigint | NO | auto | PK |
|
|
194
|
+
| item_id | bigint | NO | | FK -> sourcemon_items |
|
|
195
|
+
| source_id | bigint | NO | | FK -> sourcemon_sources |
|
|
196
|
+
| success | boolean | NO | false | Scrape succeeded |
|
|
197
|
+
| started_at | datetime | NO | | Scrape start time |
|
|
198
|
+
| completed_at | datetime | YES | | Scrape end time |
|
|
199
|
+
| duration_ms | integer | YES | | Duration in milliseconds |
|
|
200
|
+
| http_status | integer | YES | | HTTP response status |
|
|
201
|
+
| scraper_adapter | string | YES | | Adapter used |
|
|
202
|
+
| content_length | integer | YES | | Scraped content length |
|
|
203
|
+
| error_class | string | YES | | Error class name |
|
|
204
|
+
| error_message | text | YES | | Error message |
|
|
205
|
+
| metadata | jsonb | NO | {} | Extra metadata |
|
|
206
|
+
| created_at | datetime | NO | | |
|
|
207
|
+
| updated_at | datetime | NO | | |
|
|
208
|
+
|
|
209
|
+
### Indexes
|
|
210
|
+
| Index | Columns | Options |
|
|
211
|
+
|-------|---------|---------|
|
|
212
|
+
| btree | success | |
|
|
213
|
+
| btree | created_at | |
|
|
214
|
+
| btree | started_at | |
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## sourcemon_health_check_logs
|
|
219
|
+
|
|
220
|
+
Records of source health checks.
|
|
221
|
+
|
|
222
|
+
| Column | Type | Null | Default | Notes |
|
|
223
|
+
|--------|------|------|---------|-------|
|
|
224
|
+
| id | bigint | NO | auto | PK |
|
|
225
|
+
| source_id | bigint | NO | | FK -> sourcemon_sources |
|
|
226
|
+
| success | boolean | NO | false | Check succeeded |
|
|
227
|
+
| started_at | datetime | NO | | Check start time |
|
|
228
|
+
| completed_at | datetime | YES | | Check end time |
|
|
229
|
+
| duration_ms | integer | YES | | Duration in milliseconds |
|
|
230
|
+
| http_status | integer | YES | | HTTP response status |
|
|
231
|
+
| http_response_headers | jsonb | NO | {} | Response headers |
|
|
232
|
+
| error_class | string | YES | | Error class name |
|
|
233
|
+
| error_message | text | YES | | Error message |
|
|
234
|
+
| created_at | datetime | NO | | |
|
|
235
|
+
| updated_at | datetime | NO | | |
|
|
236
|
+
|
|
237
|
+
### Indexes
|
|
238
|
+
| Index | Columns | Options |
|
|
239
|
+
|-------|---------|---------|
|
|
240
|
+
| btree | started_at | |
|
|
241
|
+
| btree | success | |
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## sourcemon_log_entries
|
|
246
|
+
|
|
247
|
+
Unified log view using delegated_type polymorphism.
|
|
248
|
+
|
|
249
|
+
| Column | Type | Null | Default | Notes |
|
|
250
|
+
|--------|------|------|---------|-------|
|
|
251
|
+
| id | bigint | NO | auto | PK |
|
|
252
|
+
| loggable_type | string | NO | | Polymorphic type |
|
|
253
|
+
| loggable_id | bigint | NO | | Polymorphic ID |
|
|
254
|
+
| source_id | bigint | NO | | FK -> sourcemon_sources |
|
|
255
|
+
| item_id | bigint | YES | | FK -> sourcemon_items (scrape logs) |
|
|
256
|
+
| success | boolean | NO | false | Operation succeeded |
|
|
257
|
+
| started_at | datetime | NO | | Operation start time |
|
|
258
|
+
| completed_at | datetime | YES | | Operation end time |
|
|
259
|
+
| http_status | integer | YES | | HTTP response status |
|
|
260
|
+
| duration_ms | integer | YES | | Duration in milliseconds |
|
|
261
|
+
| items_created | integer | YES | | New items (fetch logs) |
|
|
262
|
+
| items_updated | integer | YES | | Updated items (fetch logs) |
|
|
263
|
+
| items_failed | integer | YES | | Failed items (fetch logs) |
|
|
264
|
+
| scraper_adapter | string | YES | | Adapter (scrape logs) |
|
|
265
|
+
| content_length | integer | YES | | Content length (scrape logs) |
|
|
266
|
+
| error_class | string | YES | | Error class name |
|
|
267
|
+
| error_message | text | YES | | Error message |
|
|
268
|
+
| created_at | datetime | NO | | |
|
|
269
|
+
| updated_at | datetime | NO | | |
|
|
270
|
+
|
|
271
|
+
### Indexes
|
|
272
|
+
| Index | Columns | Options |
|
|
273
|
+
|-------|---------|---------|
|
|
274
|
+
| btree | [loggable_type, loggable_id] | |
|
|
275
|
+
| btree | started_at | |
|
|
276
|
+
| btree | success | |
|
|
277
|
+
| btree | scraper_adapter | |
|
|
278
|
+
| btree | [started_at DESC, id DESC] | |
|
|
279
|
+
| btree | [loggable_type, started_at DESC, id DESC] | |
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## sourcemon_import_sessions
|
|
284
|
+
|
|
285
|
+
OPML import wizard state tracking.
|
|
286
|
+
|
|
287
|
+
| Column | Type | Null | Default | Notes |
|
|
288
|
+
|--------|------|------|---------|-------|
|
|
289
|
+
| id | bigint | NO | auto | PK |
|
|
290
|
+
| user_id | bigint | NO | | FK -> users (host app) |
|
|
291
|
+
| opml_file_metadata | jsonb | NO | {} | Uploaded file info |
|
|
292
|
+
| parsed_sources | jsonb | NO | [] | Parsed OPML entries |
|
|
293
|
+
| selected_source_ids | jsonb | NO | [] | User-selected sources |
|
|
294
|
+
| bulk_settings | jsonb | NO | {} | Bulk import settings |
|
|
295
|
+
| current_step | string | NO | | Current wizard step |
|
|
296
|
+
| health_checks_active | boolean | NO | false | Health checks running |
|
|
297
|
+
| health_check_target_ids | jsonb | NO | [] | Sources being checked |
|
|
298
|
+
| health_check_started_at | datetime | YES | | Health check start |
|
|
299
|
+
| health_check_completed_at | datetime | YES | | Health check end |
|
|
300
|
+
| created_at | datetime | NO | | |
|
|
301
|
+
| updated_at | datetime | NO | | |
|
|
302
|
+
|
|
303
|
+
### Indexes
|
|
304
|
+
| Index | Columns | Options |
|
|
305
|
+
|-------|---------|---------|
|
|
306
|
+
| btree | current_step | |
|
|
307
|
+
| btree | health_checks_active | |
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## sourcemon_import_histories
|
|
312
|
+
|
|
313
|
+
Completed import records.
|
|
314
|
+
|
|
315
|
+
| Column | Type | Null | Default | Notes |
|
|
316
|
+
|--------|------|------|---------|-------|
|
|
317
|
+
| id | bigint | NO | auto | PK |
|
|
318
|
+
| user_id | bigint | NO | | FK -> users (host app) |
|
|
319
|
+
| imported_sources | jsonb | NO | [] | Successfully imported |
|
|
320
|
+
| failed_sources | jsonb | NO | [] | Failed imports |
|
|
321
|
+
| skipped_duplicates | jsonb | NO | [] | Skipped duplicates |
|
|
322
|
+
| bulk_settings | jsonb | NO | {} | Settings used |
|
|
323
|
+
| started_at | datetime | YES | | Import start time |
|
|
324
|
+
| completed_at | datetime | YES | | Import end time |
|
|
325
|
+
| created_at | datetime | NO | | |
|
|
326
|
+
| updated_at | datetime | NO | | |
|
|
327
|
+
|
|
328
|
+
### Indexes
|
|
329
|
+
| Index | Columns | Options |
|
|
330
|
+
|-------|---------|---------|
|
|
331
|
+
| btree | created_at | |
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Foreign Key Summary
|
|
336
|
+
|
|
337
|
+
| From Table | Column | To Table |
|
|
338
|
+
|------------|--------|----------|
|
|
339
|
+
| sourcemon_items | source_id | sourcemon_sources |
|
|
340
|
+
| sourcemon_item_contents | item_id | sourcemon_items |
|
|
341
|
+
| sourcemon_fetch_logs | source_id | sourcemon_sources |
|
|
342
|
+
| sourcemon_scrape_logs | item_id | sourcemon_items |
|
|
343
|
+
| sourcemon_scrape_logs | source_id | sourcemon_sources |
|
|
344
|
+
| sourcemon_health_check_logs | source_id | sourcemon_sources |
|
|
345
|
+
| sourcemon_log_entries | source_id | sourcemon_sources |
|
|
346
|
+
| sourcemon_log_entries | item_id | sourcemon_items |
|
|
347
|
+
| sourcemon_import_sessions | user_id | users |
|
|
348
|
+
| sourcemon_import_histories | user_id | users |
|