Skip to content

ti_abusech: switch URL data stream to incremental API#18945

Draft
kcreddy wants to merge 3 commits into
elastic:mainfrom
kcreddy:ti_abusech-incremental-api
Draft

ti_abusech: switch URL data stream to incremental API#18945
kcreddy wants to merge 3 commits into
elastic:mainfrom
kcreddy:ti_abusech-incremental-api

Conversation

@kcreddy
Copy link
Copy Markdown
Contributor

@kcreddy kcreddy commented May 11, 2026

Proposed commit message

ti_abusech: switch URL data stream to incremental API

Replace the full-export ZIP download (/downloads/json) with the
incremental /v1/urls/recent/ endpoint. The full export ingested all
active indicators every interval as a single batch, causing large
memory spikes. The incremental API returns only recently added URLs
as plain JSON, eliminating ZIP decompression and bulk allocation.

IOC expiration is now user-configurable via a new
ioc_expiration_duration setting (default 90d), computed from
first_seen rather than event.ingested. This matches the pattern
already used by the malware, threatfox, and malwarebazaar sibling
data streams.

Changes:
- CEL program: GET to /v1/urls/recent/, decode body.urls, no ZIP
- Manifest: new default URL, ioc_expiration_duration var, 10m interval
- Pipeline: replace interval-based expiration with duration-based,
  rename _conf.ioc_expiration_duration to abusech.url field
- Fields: replace labels.interval with abusech.url.ioc_expiration_duration
- Tests: update fixtures to incremental API response format
- Version: 3.6.0 -> 4.0.0 (breaking: labels.interval field removed)

Checklist

  • I have reviewed tips for building integrations and this pull request is aligned with them.
  • I have verified that all data streams collect metrics or logs.
  • I have added an entry to my package's changelog.yml file.
  • I have verified that Kibana version constraints are current according to guidelines.
  • I have verified that any added dashboard complies with Kibana's Dashboard good practices

How to test this PR locally

System tests (with incremental API) are successful

--- Test results for package: ti_abusech - START ---
╭────────────┬─────────────┬───────────┬───────────┬────────┬───────────────╮
│ PACKAGE    │ DATA STREAM │ TEST TYPE │ TEST NAME │ RESULT │  TIME ELAPSED │
├────────────┼─────────────┼───────────┼───────────┼────────┼───────────────┤
│ ti_abusech │ url         │ system    │ auth      │ PASS   │ 38.823285375s │
╰────────────┴─────────────┴───────────┴───────────┴────────┴───────────────╯
--- Test results for package: ti_abusech - END   ---
Done

Replace the full-export ZIP download (/downloads/json) with the
incremental /v1/urls/recent/ endpoint. The full export ingested all
active indicators every interval as a single batch, causing large
memory spikes. The incremental API returns only recently added URLs
as plain JSON, eliminating ZIP decompression and bulk allocation.

IOC expiration is now user-configurable via a new
ioc_expiration_duration setting (default 90d), computed from
first_seen rather than event.ingested. This matches the pattern
already used by the malware, threatfox, and malwarebazaar sibling
data streams.

Changes:
- CEL program: GET to /v1/urls/recent/, decode body.urls, no ZIP
- Manifest: new default URL, ioc_expiration_duration var, 10m interval
- Pipeline: replace interval-based expiration with duration-based,
  rename _conf.ioc_expiration_duration to abusech.url field
- Fields: replace labels.interval with abusech.url.ioc_expiration_duration
- Tests: update fixtures to incremental API response format
- Version: 3.6.0 -> 4.0.0 (breaking: labels.interval field removed)
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 11, 2026

Vale Linting Results

Summary: 1 suggestion found

💡 Suggestions (1)
File Line Rule Message
packages/ti_abusech/docs/README.md 314 Elastic.WordChoice Consider using 'blocklist' instead of 'blacklist', unless the term is in the UI.

The Vale linter checks documentation changes against the Elastic Docs style guide.

To use Vale locally or report issues, refer to Elastic style guide for Vale.

@kcreddy kcreddy self-assigned this May 11, 2026
@kcreddy kcreddy added Integration:ti_abusech abuse.ch Team:Security-Service Integrations Security Service Integrations team [elastic/security-service-integrations] enhancement New feature or request breaking change labels May 11, 2026
@elastic-vault-github-plugin-prod
Copy link
Copy Markdown

🚀 Benchmarks report

Package ti_abusech 👍(3) 💚(5) 💔(4)

Expand to view
Data stream Previous EPS New EPS Diff (%) Result
ja3_fingerprints 17857.14 9363.3 -8493.84 (-47.57%) 💔
malware 19607.84 10752.69 -8855.15 (-45.16%) 💔
malware 19607.84 16129.03 -3478.81 (-17.74%) 💔
malwarebazaar 11494.25 9345.79 -2148.46 (-18.69%) 💔

To see the full report comment with /test benchmark fullreport

@andrewkroh andrewkroh added the documentation Improvements or additions to documentation. Applied to PRs that modify *.md files. label May 11, 2026
Add a CEL program guard that detects when the URL is still set to the
old full export endpoint (/downloads/json) after an upgrade and returns
a clear error message instead of failing with a cryptic JSON unmarshal
error.

Update the README troubleshooting section with v4.0.0 upgrade steps
and revise the breaking-change changelog entry to cover the URL
migration, labels.interval removal, and the new IOC Expiration Duration
setting.

Co-authored-by: Cursor <cursoragent@cursor.com>
@elasticmachine
Copy link
Copy Markdown

💔 Build Failed

Failed CI Steps

History

cc @kcreddy

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking change documentation Improvements or additions to documentation. Applied to PRs that modify *.md files. enhancement New feature or request Integration:ti_abusech abuse.ch Team:Security-Service Integrations Security Service Integrations team [elastic/security-service-integrations]

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants