|
13 | 13 |
|
14 | 14 | # Configuration |
15 | 15 | ANTHROPIC_API_KEY = os.environ.get("ANTHROPIC_API_KEY") |
16 | | -CATEGORIES = { |
| 16 | +CATEGORY_BATCH = os.environ.get("CATEGORY_BATCH", "1") # 1, 2, or 3 |
| 17 | + |
| 18 | +# All categories split into 3 batches |
| 19 | +ALL_CATEGORIES = { |
17 | 20 | "Infrastructure Clouds": { |
18 | 21 | "keywords": ["GPU cloud", "cloud compute", "inference API", "serverless GPU"], |
19 | | - "description": "GPU and compute infrastructure providers" |
| 22 | + "description": "GPU and compute infrastructure providers", |
| 23 | + "batch": "1" |
20 | 24 | }, |
21 | | - "Sovereign Clouds": { |
22 | | - "keywords": ["sovereign cloud", "data residency", "regional compliance cloud"], |
23 | | - "description": "Cloud platforms with data sovereignty" |
| 25 | + "Developer Happiness Clouds": { |
| 26 | + "keywords": ["PaaS", "deployment platform", "CI/CD", "developer tools cloud"], |
| 27 | + "description": "Developer platforms and tools", |
| 28 | + "batch": "1" |
24 | 29 | }, |
25 | 30 | "Data Clouds": { |
26 | 31 | "keywords": ["database cloud", "data warehouse", "analytics platform", "observability"], |
27 | | - "description": "Data storage, processing, and observability" |
28 | | - }, |
29 | | - "Workflow and Operations Clouds": { |
30 | | - "keywords": ["workflow automation", "orchestration platform", "incident management"], |
31 | | - "description": "Workflow automation and operations" |
| 32 | + "description": "Data storage, processing, and observability", |
| 33 | + "batch": "1" |
32 | 34 | }, |
33 | 35 | "Network, Connectivity and Security Clouds": { |
34 | 36 | "keywords": ["CDN", "edge network", "zero trust", "API gateway", "VPN alternative"], |
35 | | - "description": "Networking, security, and connectivity" |
36 | | - }, |
37 | | - "Vibe Clouds": { |
38 | | - "keywords": ["AI coding assistant", "LLM API", "AI development platform"], |
39 | | - "description": "AI-powered creativity and development tools" |
| 37 | + "description": "Networking, security, and connectivity", |
| 38 | + "batch": "1" |
40 | 39 | }, |
41 | | - "Developer Happiness Clouds": { |
42 | | - "keywords": ["PaaS", "deployment platform", "CI/CD", "developer tools cloud"], |
43 | | - "description": "Developer platforms and tools" |
| 40 | + "Workflow and Operations Clouds": { |
| 41 | + "keywords": ["workflow automation", "orchestration platform", "incident management"], |
| 42 | + "description": "Workflow automation and operations", |
| 43 | + "batch": "1" |
44 | 44 | }, |
45 | 45 | "Authorization, Identity, Fraud and Abuse Clouds": { |
46 | 46 | "keywords": ["authentication service", "identity platform", "fraud detection API"], |
47 | | - "description": "Auth, identity, and fraud prevention" |
| 47 | + "description": "Auth, identity, and fraud prevention", |
| 48 | + "batch": "2" |
48 | 49 | }, |
49 | 50 | "Monetization, Finance and Legal Clouds": { |
50 | 51 | "keywords": ["billing platform", "usage metering", "subscription management API"], |
51 | | - "description": "Billing, payments, and monetization" |
| 52 | + "description": "Billing, payments, and monetization", |
| 53 | + "batch": "2" |
52 | 54 | }, |
53 | | - "Customer, Marketing and eCommerce Clouds": { |
54 | | - "keywords": ["CRM platform", "marketing automation", "ecommerce platform"], |
55 | | - "description": "Customer engagement and commerce" |
| 55 | + "Vibe Clouds": { |
| 56 | + "keywords": ["AI coding assistant", "LLM API", "AI development platform"], |
| 57 | + "description": "AI-powered creativity and development tools", |
| 58 | + "batch": "2" |
56 | 59 | }, |
57 | 60 | "IoT, Communications, and Media Clouds": { |
58 | 61 | "keywords": ["IoT platform", "messaging API", "video platform", "SMS gateway"], |
59 | | - "description": "IoT, communications, and media" |
| 62 | + "description": "IoT, communications, and media", |
| 63 | + "batch": "2" |
| 64 | + }, |
| 65 | + "Sovereign Clouds": { |
| 66 | + "keywords": ["sovereign cloud", "data residency", "regional compliance cloud"], |
| 67 | + "description": "Cloud platforms with data sovereignty", |
| 68 | + "batch": "2" |
| 69 | + }, |
| 70 | + "Customer, Marketing and eCommerce Clouds": { |
| 71 | + "keywords": ["CRM platform", "marketing automation", "ecommerce platform"], |
| 72 | + "description": "Customer engagement and commerce", |
| 73 | + "batch": "3" |
60 | 74 | }, |
61 | 75 | "Blockchain Clouds": { |
62 | 76 | "keywords": ["blockchain infrastructure", "web3 cloud", "decentralized compute"], |
63 | | - "description": "Blockchain-based infrastructure" |
| 77 | + "description": "Blockchain-based infrastructure", |
| 78 | + "batch": "3" |
64 | 79 | }, |
65 | 80 | "Unikernels & WebAssembly": { |
66 | 81 | "keywords": ["unikernel platform", "WebAssembly cloud", "wasm runtime"], |
67 | | - "description": "Unikernel and WebAssembly platforms" |
| 82 | + "description": "Unikernel and WebAssembly platforms", |
| 83 | + "batch": "3" |
68 | 84 | }, |
69 | 85 | "Source Code Control": { |
70 | 86 | "keywords": ["git hosting", "version control platform", "code repository"], |
71 | | - "description": "Source code management" |
| 87 | + "description": "Source code management", |
| 88 | + "batch": "3" |
72 | 89 | }, |
73 | 90 | "Cloud Adjacent": { |
74 | 91 | "keywords": ["cloud tools", "cloud utilities", "infrastructure software"], |
75 | | - "description": "Cloud-complementary tools and services" |
| 92 | + "description": "Cloud-complementary tools and services", |
| 93 | + "batch": "3" |
76 | 94 | } |
77 | 95 | } |
78 | 96 |
|
| 97 | +# Filter categories based on batch |
| 98 | +CATEGORIES = {k: v for k, v in ALL_CATEGORIES.items() if v["batch"] == CATEGORY_BATCH} |
| 99 | + |
79 | 100 |
|
80 | 101 | class AltCloudsMonitor: |
81 | 102 | def __init__(self): |
@@ -182,6 +203,7 @@ def run_daily_monitor(self) -> Dict[str, Any]: |
182 | 203 | """ |
183 | 204 | print("🚀 Starting daily alt-clouds monitoring...") |
184 | 205 | print(f"📅 {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") |
| 206 | + print(f"📦 Batch: {CATEGORY_BATCH}") |
185 | 207 | print(f"🔍 Monitoring {len(CATEGORIES)} categories") |
186 | 208 | print("-" * 60) |
187 | 209 |
|
@@ -217,7 +239,7 @@ def run_daily_monitor(self) -> Dict[str, Any]: |
217 | 239 | output["by_category"][cat].append(candidate) |
218 | 240 |
|
219 | 241 | # Save to file |
220 | | - output_file = f"data/candidates/scan-{datetime.now().strftime('%Y%m%d')}.json" |
| 242 | + output_file = f"data/candidates/scan-{datetime.now().strftime('%Y%m%d')}-batch{CATEGORY_BATCH}.json" |
221 | 243 | os.makedirs(os.path.dirname(output_file), exist_ok=True) |
222 | 244 |
|
223 | 245 | with open(output_file, 'w') as f: |
|
0 commit comments