pybgpkitstream 0.1.0__tar.gz → 0.1.2__tar.gz
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.
- {pybgpkitstream-0.1.0 → pybgpkitstream-0.1.2}/PKG-INFO +19 -5
- {pybgpkitstream-0.1.0 → pybgpkitstream-0.1.2}/README.md +18 -4
- {pybgpkitstream-0.1.0 → pybgpkitstream-0.1.2}/pyproject.toml +1 -1
- {pybgpkitstream-0.1.0 → pybgpkitstream-0.1.2}/src/pybgpkitstream/bgpkitstream.py +7 -3
- {pybgpkitstream-0.1.0 → pybgpkitstream-0.1.2}/src/pybgpkitstream/bgpstreamconfig.py +4 -0
- {pybgpkitstream-0.1.0 → pybgpkitstream-0.1.2}/src/pybgpkitstream/__init__.py +0 -0
- {pybgpkitstream-0.1.0 → pybgpkitstream-0.1.2}/src/pybgpkitstream/bgpelement.py +0 -0
- {pybgpkitstream-0.1.0 → pybgpkitstream-0.1.2}/src/pybgpkitstream/cli.py +0 -0
- {pybgpkitstream-0.1.0 → pybgpkitstream-0.1.2}/src/pybgpkitstream/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pybgpkitstream
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Drop-in replacement for PyBGPStream using BGPKIT
|
|
5
5
|
Author: JustinLoye
|
|
6
6
|
Author-email: JustinLoye <jloye@iij.ad.jp>
|
|
@@ -16,17 +16,25 @@ A drop-in replacement for PyBGPStream using BGPKIT
|
|
|
16
16
|
|
|
17
17
|
## Features
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
19
|
+
- Effortless BGP Stream Switching:
|
|
20
|
+
- Seamless, drop-in replacement ([example](tests/test_stream.py#L38))
|
|
21
21
|
- Lazy message generation: generates time-ordered BGP messages on the fly, consuming minimal memory and making it suitable for large datasets
|
|
22
22
|
- Supports multiple route collectors
|
|
23
23
|
- Supports both ribs and updates
|
|
24
|
-
- Caching with concurrent downloading is enabled
|
|
25
|
-
- [
|
|
24
|
+
- Caching with concurrent downloading is enabled and is fully compatible with the BGPKIT parser's caching functionality.
|
|
25
|
+
- [Similar performance to PyBGPStream](examples/perf.ipynb)
|
|
26
26
|
- A CLI tool
|
|
27
27
|
|
|
28
28
|
## Quick start
|
|
29
29
|
|
|
30
|
+
Installation:
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
pip install pybgpkitstream
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Usage:
|
|
37
|
+
|
|
30
38
|
```python
|
|
31
39
|
import datetime
|
|
32
40
|
from pybgpkitstream import BGPStreamConfig, BGPKITStream
|
|
@@ -47,6 +55,12 @@ for _ in stream:
|
|
|
47
55
|
print(f"Processed {n_elems} BGP elements")
|
|
48
56
|
```
|
|
49
57
|
|
|
58
|
+
or in the terminal:
|
|
59
|
+
|
|
60
|
+
```sh
|
|
61
|
+
pybgpkitstream --start-time 2010-09-01T00:00:00 --end-time 2010-09-01T01:59:00 --collectors route-views.sydney route-views.wide --data-types updates > updates.txt
|
|
62
|
+
```
|
|
63
|
+
|
|
50
64
|
## Motivation
|
|
51
65
|
|
|
52
66
|
PyBGPStream is great but the implementation is complex and stops working when UC San Diego experiences a power outage.
|
|
@@ -4,17 +4,25 @@ A drop-in replacement for PyBGPStream using BGPKIT
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
7
|
+
- Effortless BGP Stream Switching:
|
|
8
|
+
- Seamless, drop-in replacement ([example](tests/test_stream.py#L38))
|
|
9
9
|
- Lazy message generation: generates time-ordered BGP messages on the fly, consuming minimal memory and making it suitable for large datasets
|
|
10
10
|
- Supports multiple route collectors
|
|
11
11
|
- Supports both ribs and updates
|
|
12
|
-
- Caching with concurrent downloading is enabled
|
|
13
|
-
- [
|
|
12
|
+
- Caching with concurrent downloading is enabled and is fully compatible with the BGPKIT parser's caching functionality.
|
|
13
|
+
- [Similar performance to PyBGPStream](examples/perf.ipynb)
|
|
14
14
|
- A CLI tool
|
|
15
15
|
|
|
16
16
|
## Quick start
|
|
17
17
|
|
|
18
|
+
Installation:
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
pip install pybgpkitstream
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Usage:
|
|
25
|
+
|
|
18
26
|
```python
|
|
19
27
|
import datetime
|
|
20
28
|
from pybgpkitstream import BGPStreamConfig, BGPKITStream
|
|
@@ -35,6 +43,12 @@ for _ in stream:
|
|
|
35
43
|
print(f"Processed {n_elems} BGP elements")
|
|
36
44
|
```
|
|
37
45
|
|
|
46
|
+
or in the terminal:
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
pybgpkitstream --start-time 2010-09-01T00:00:00 --end-time 2010-09-01T01:59:00 --collectors route-views.sydney route-views.wide --data-types updates > updates.txt
|
|
50
|
+
```
|
|
51
|
+
|
|
38
52
|
## Motivation
|
|
39
53
|
|
|
40
54
|
PyBGPStream is great but the implementation is complex and stops working when UC San Diego experiences a power outage.
|
|
@@ -53,6 +53,7 @@ class BGPKITStream:
|
|
|
53
53
|
data_type: list[Literal["update", "rib"]],
|
|
54
54
|
cache_dir: str | None,
|
|
55
55
|
filters: dict = {},
|
|
56
|
+
max_concurrent_downloads: int = 10,
|
|
56
57
|
):
|
|
57
58
|
self.ts_start = ts_start
|
|
58
59
|
self.ts_end = ts_end
|
|
@@ -60,6 +61,7 @@ class BGPKITStream:
|
|
|
60
61
|
self.data_type = data_type
|
|
61
62
|
self.cache_dir = cache_dir
|
|
62
63
|
self.filters = filters
|
|
64
|
+
self.max_concurrent_downloads = max_concurrent_downloads
|
|
63
65
|
|
|
64
66
|
self.broker = bgpkit.Broker()
|
|
65
67
|
|
|
@@ -129,8 +131,7 @@ class BGPKITStream:
|
|
|
129
131
|
self.paths = {"rib": defaultdict(list), "update": defaultdict(list)}
|
|
130
132
|
tasks = []
|
|
131
133
|
|
|
132
|
-
|
|
133
|
-
semaphore = asyncio.Semaphore(CONCURRENT_DOWNLOADS)
|
|
134
|
+
semaphore = asyncio.Semaphore(self.max_concurrent_downloads)
|
|
134
135
|
|
|
135
136
|
conn = aiohttp.TCPConnector()
|
|
136
137
|
async with aiohttp.ClientSession(connector=conn) as session:
|
|
@@ -154,7 +155,7 @@ class BGPKITStream:
|
|
|
154
155
|
|
|
155
156
|
if tasks:
|
|
156
157
|
logging.info(
|
|
157
|
-
f"Starting download of {len(tasks)} files with a concurrency of {
|
|
158
|
+
f"Starting download of {len(tasks)} files with a concurrency of {self.max_concurrent_downloads}..."
|
|
158
159
|
)
|
|
159
160
|
results = await asyncio.gather(*tasks)
|
|
160
161
|
|
|
@@ -225,4 +226,7 @@ class BGPKITStream:
|
|
|
225
226
|
filters=config.filters.model_dump(exclude_unset=True)
|
|
226
227
|
if config.filters
|
|
227
228
|
else {},
|
|
229
|
+
max_concurrent_downloads=config.max_concurrent_downloads
|
|
230
|
+
if config.max_concurrent_downloads
|
|
231
|
+
else 10,
|
|
228
232
|
)
|
|
@@ -40,6 +40,9 @@ class FilterOptions(BaseModel):
|
|
|
40
40
|
as_path: str | None = Field(
|
|
41
41
|
default=None, description="Filter by a regular expression matching the AS path."
|
|
42
42
|
)
|
|
43
|
+
ip_version: Literal["ipv4", "ipv6"] | None = Field(
|
|
44
|
+
default=None, description="Filter by ip version."
|
|
45
|
+
)
|
|
43
46
|
|
|
44
47
|
|
|
45
48
|
class BGPStreamConfig(BaseModel):
|
|
@@ -60,3 +63,4 @@ class BGPStreamConfig(BaseModel):
|
|
|
60
63
|
description="Specifies the directory for caching downloaded files.",
|
|
61
64
|
)
|
|
62
65
|
filters: FilterOptions | None = Field(default=None, description="Optional filters")
|
|
66
|
+
max_concurrent_downloads: int | None = Field(default=None, description="Maximum concurrent downloads when caching")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|