Skip to content

Commit 2e403d2

Browse files
committed
First cut feed automation grouping app
1 parent df58db9 commit 2e403d2

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed

.github/workflows/feed.yml

+8
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ jobs:
3939
- name: Install Vespa CLI
4040
uses: vespa-engine/setup-vespa-cli-action@v1
4141

42+
- name: Feed part-purchases-demo
43+
run: |
44+
export VESPA_CLI_DATA_PLANE_CERT
45+
export VESPA_CLI_DATA_PLANE_KEY
46+
while IFS=, read -r app endpoint; do
47+
vespa feed -a "$app" -t "$endpoint" examples/part-purchases-demo/ext/feed.jsonl
48+
done < <(./scripts/print-app-endpoints.py _config.yml)
49+
4250
- name: Feed site
4351
run: |
4452
# The python scripts below uses the Vespa CLI for feeding / data access.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{"fields": {"attributes": {"delivery_method": "Curbside Pickup", "sales_rep": "Bonnie", "coupon": "SAVE10"},"customer": "Smith","date": 1157526000,"item": "Intake valve","price": "1000","tax": "0.24"},"put": "id:purchase:purchase::0"}
2+
{"fields": {"attributes": {"delivery_method": "In-Store Pickup", "sales_rep": "Bonnie", "coupon": "SPRING5"},"customer": "Smith","date": 1157616000,"item": "Rocker arm","price": "1000","tax": "0.12"},"put": "id:purchase:purchase::1"}
3+
{"fields": {"attributes": {"delivery_method": "In-Store Pickup", "sales_rep": "Bonnie", "coupon": "VIP25"},"customer": "Smith","date": 1157619600,"item": "Spring","price": "2000","tax": "0.24"},"put": "id:purchase:purchase::2"}
4+
{"fields": {"attributes": {"delivery_method": "In-Store Pickup", "sales_rep": "Tim", "coupon": "VIP25"},"customer": "Jones","date": 1157709600,"item": "Valve cover","price": "3000","tax": "0.12"},"put": "id:purchase:purchase::3"}
5+
{"fields": {"attributes": {"delivery_method": "In-Store Pickup", "sales_rep": "Tim", "coupon": "VIP25"},"customer": "Jones","date": 1157702400,"item": "Intake port","price": "5000","tax": "0.24"},"put": "id:purchase:purchase::4"}
6+
{"fields": {"attributes": {"delivery_method": "Locker Pickup", "sales_rep": "Tim", "coupon": "SPRING5"},"customer": "Brown","date": 1157706000,"item": "Head","price": "8000","tax": "0.12"},"put": "id:purchase:purchase::5"}
7+
{"fields": {"attributes": {"delivery_method": "Locker Pickup", "sales_rep": "Bonnie", "coupon": "SPRING5"},"customer": "Smith","date": 1157796000,"item": "Coolant","price": "1300","tax": "0.24"},"put": "id:purchase:purchase::6"}
8+
{"fields": {"attributes": {"delivery_method": "Curbside Pickup", "sales_rep": "Bonnie", "coupon": "WELCOME10"},"customer": "Jones","date": 1157788800,"item": "Engine block","price": "2100","tax": "0.12"},"put": "id:purchase:purchase::7"}
9+
{"fields": {"attributes": {"delivery_method": "Drone Delivery", "sales_rep": "Ulrik", "coupon": "WELCOME10"},"customer": "Brown","date": 1157792400,"item": "Oil pan","price": "3400","tax": "0.24"},"put": "id:purchase:purchase::8"}
10+
{"fields": {"attributes": {"delivery_method": "Drone Delivery", "sales_rep": "Ulrik", "coupon": "VIP25"},"customer": "Smith","date": 1157796000,"item": "Oil sump","price": "5500","tax": "0.12"},"put": "id:purchase:purchase::9"}
11+
{"fields": {"attributes": {"delivery_method": "Drone Delivery", "sales_rep": "Tim", "coupon": "VIP25"},"customer": "Jones","date": 1157875200,"item": "Camshaft","price": "8900","tax": "0.24"},"put": "id:purchase:purchase::10"}
12+
{"fields": {"attributes": {"delivery_method": "Curbside Pickup", "sales_rep": "Bonnie", "coupon": "SPRING5"},"customer": "Brown","date": 1157878800,"item": "Exhaust valve","price": "1440","tax": "0.12"},"put": "id:purchase:purchase::11"}
13+
{"fields": {"attributes": {"delivery_method": "Curbside Pickup", "sales_rep": "Bonnie", "coupon": "VIP25"},"customer": "Brown","date": 1157882400,"item": "Rocker arm","price": "2330","tax": "0.24"},"put": "id:purchase:purchase::12"}
14+
{"fields": {"attributes": {"delivery_method": "Drone Delivery", "sales_rep": "Bonnie", "coupon": "SPRING5"},"customer": "Brown","date": 1157875200,"item": "Spring","price": "3770","tax": "0.12"},"put": "id:purchase:purchase::13"}
15+
{"fields": {"attributes": {"delivery_method": "Drone Delivery", "sales_rep": "Bonnie", "coupon": "SPRING5"},"customer": "Smith","date": 1157878800,"item": "Spark plug","price": "6100","tax": "0.24"},"put": "id:purchase:purchase::14"}
16+
{"fields": {"attributes": {"delivery_method": "In-Store Pickup", "sales_rep": "Ulrik", "coupon": "VIP25"},"customer": "Jones","date": 1157968800,"item": "Exhaust port","price": "9870","tax": "0.12"},"put": "id:purchase:purchase::15"}
17+
{"fields": {"attributes": {"delivery_method": "In-Store Pickup", "sales_rep": "Bonnie", "coupon": "VIP25"},"customer": "Brown","date": 1157961600,"item": "Piston","price": "1597","tax": "0.24"},"put": "id:purchase:purchase::16"}
18+
{"fields": {"attributes": {"delivery_method": "Drone Delivery", "sales_rep": "Ulrik", "coupon": "SPRING5"},"customer": "Smith","date": 1157965200,"item": "Connection rod","price": "2584","tax": "0.12"},"put": "id:purchase:purchase::17"}
19+
{"fields": {"attributes": {"delivery_method": "Locker Pickup", "sales_rep": "Tim", "coupon": "WELCOME10"},"customer": "Jones","date": 1157968800,"item": "Rod bearing","price": "4181","tax": "0.24"},"put": "id:purchase:purchase::18"}
20+
{"fields": {"attributes": {"delivery_method": "Locker Pickup", "sales_rep": "Tim", "coupon": "WELCOME10"},"customer": "Jones","date": 1157972400,"item": "Crankshaft","price": "6765","tax": "0.12"},"put": "id:purchase:purchase::19"}

scripts/print-app-endpoints.py

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env python3
2+
# Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
3+
4+
import yaml
5+
import argparse
6+
import re
7+
8+
9+
def get_app(endpoint):
10+
splits = re.split(r'/|\.', endpoint)
11+
return splits[3] + '.' + splits[2]
12+
13+
def main():
14+
parser = argparse.ArgumentParser()
15+
parser.add_argument("yaml_config")
16+
args = parser.parse_args()
17+
config = yaml.safe_load(open(args.yaml_config, "r"))
18+
urls = [get_app(entry["url"]) + "," + entry["url"] for entry in config.get("search", {}).get("feed_endpoints", []) if "url" in entry]
19+
print("\n".join(urls))
20+
21+
22+
if __name__ == "__main__":
23+
main()

0 commit comments

Comments
 (0)