Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
4b8e15a
Release/0.6.0 (#20)
pferrel Sep 10, 2020
3b9313b
Merge remote-tracking branch 'origin/master' into develop
pferrel Sep 10, 2020
e6018e7
removed the server address from the integration test results
pferrel Sep 10, 2020
769b3c8
changing expected results to remove server address
pferrel Sep 10, 2020
2381d1d
creating 1.0.0-SNAPSHOT
pferrel Sep 10, 2020
c2b9d7d
Increased sleep_seconds to 3 in the simple-int-test
qqmbr4k Sep 18, 2020
447022f
Increased timeouts before and after engines manipulations
qqmbr4k Sep 18, 2020
97a3141
Decreased timeouts back
qqmbr4k Sep 18, 2020
4234302
fixed hctl status system wording
pferrel Mar 17, 2021
3fdbede
fixing help messages
pferrel Mar 17, 2021
f90adfa
Merge branch 'develop' of https://github.com/actionml/harness-cli int…
pferrel Mar 17, 2021
9116c65
Configure aws cli (#10)
pferrel Jun 11, 2021
1aaf1d0
Added user-data test
qqmbr4k Jun 19, 2021
9ad5e97
Added nano and vi editors
DioniPinho Jun 29, 2021
c81a654
Vi install fixed
DioniPinho Jun 29, 2021
6629f25
Merge pull request #23 from actionml/feature/user-data-test
qqmbr4k Jul 2, 2021
68eca1b
added jq
tmaior Jul 7, 2021
c6829f0
Added delete_user_data and get_user_data methods
qqmbr4k Jul 20, 2021
1e8bda9
Added delete_user_data and get_user_data methods (#24)
qqmbr4k Aug 4, 2021
0acc1bf
Fixed delete user data test case
qqmbr4k Sep 24, 2021
f4fa676
Merge branch 'develop' into feature/get-and-delete-user-data
qqmbr4k Sep 24, 2021
3bc7f12
Merge pull request #25 from actionml/feature/get-and-delete-user-data
qqmbr4k Sep 27, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,4 @@ workflows:
- publish:
requires:
- build
- test
- test
9 changes: 0 additions & 9 deletions .idea/hydra.xml

This file was deleted.

8 changes: 5 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ COPY . /harness-cli
ENV PATH=/harness-cli/harness-cli/:$PATH

RUN apt update && \
apt-get install -y tzdata && \
dpkg-reconfigure --frontend noninteractive tzdata
apt-get install -y tzdata curl unzip build-essential groff less nano jq vim && \
dpkg-reconfigure --frontend noninteractive tzdata && \
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
unzip awscliv2.zip && ./aws/install

RUN apt install -y python3 python3-pip curl openjdk-8-jdk && \
pip3 install pytz && \
Expand All @@ -30,4 +32,4 @@ RUN cd /harness-cli/diff-tool/ && make build && \
apt autoremove && \
rm -rf /harness-cli/python-sdk && \
rm -rf /var/apt/cache/*
CMD ["tail", "-f", "/dev/null"]
CMD ["tail", "-f", "/dev/null"]
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,10 @@ The "status" gives an "OK" if connections can be made, the rest of the info is c

The Harness-CLI follows the same version numbers as the Harness Server. If you build from source there will be a git tag in the master branch for every release after 0.4.0-RC1. For containers the image tags also follow Harness naming.

## harness-cli version 1.0.0-SNAPSHOT

Synced with harness-1.0.0-SNAPSHOT. No planned changes from 0.6.0. This version is in the "develop" branch of this repo.

## harness-cli version 0.6.0

This is in sync with Harness 0.6.0 but should be backward compatible with all 0.5.x harness versions.
Expand Down
1 change: 0 additions & 1 deletion examples/ur/expected-ur-results.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
Queries to: http://localhost:9090

+++++++++++++ User-based +++++++++++++

Expand Down
259 changes: 259 additions & 0 deletions examples/ur/sample-mobile-device-ur-data-long-history.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,259 @@
u1,purchase,iPhone XS
u1,purchase,iPhone XR
u1,purchase,iPhone 8
u1,purchase,iPad Pro
U 2,purchase,Pixel Slate
U 2,purchase,Galaxy 8
u-3,purchase,Surface Pro
u-4,purchase,iPhone XR
u-4,purchase,iPhone XR
u-4,purchase,iPhone XR
u-4,purchase,iPhone XR
u-4,purchase,iPhone 8
u-4,purchase,Galaxy 8
u1,view,Phones
u1,view,Phones
u1,view,Phones
u1,view,Phones
u1,view,Phones
u1,view,Phones
u1,view,Mobile-acc
U 2,view,Phones
U 2,view,Tablets
U 2,view,Mobile-acc
u-3,view,Mobile-acc
u-4,view,Phones
u-4,view,Tablets
u-4,view,Soap
u5,view,Soap
u1,category-pref,phones
u1,category-pref,phones
u1,category-pref,phones
u1,category-pref,tablets
U 2,category-pref,tablets
U 2,category-pref,phones
u-3,category-pref,tablets
u-4,category-pref,phones
u-4,category-pref,phones
u5,category-pref,toiletries
iPhone XS,$set,categories:Phones:Electronics:Apple
iPhone XR,$set,categories:Phones:Electronics:Apple
iPhone 8,$set,categories:Phones:Electronics:Apple
iPad Pro,$set,categories:Tablets:Electronics:Apple
Pixel Slate,$set,categories:Tablets:Electronics:Google
Galaxy 8,$set,categories:Phones:Electronics:Samsung
Surface Pro,$set,categories:Tablets:Electronics:Microsoft
iPhone 8,$set,countries:United States:Canada:Estados Unidos Mexicanos
iPad Pro,$set,countries:United States:Estados Unidos Mexicanos
Pixel Slate,$set,countries:United States:Canada
Galaxy 8,$set,countries:United States
Surface Pro,$set,countries:United States:Canada
iPhone XS,$set,categories:Cameras
iPhone XR,$set,categories:Cameras
iPhone 8,$set,categories:Cameras
iPad Pro,$set,categories:Computers
Pixel Slate,$set,categories:Computers
Galaxy 8,$set,categories:Cameras
Surface Pro,$set,categories:Computers
iPhone 8,$set,countries:Cuba
iPad Pro,$set,countries:Cuba
Pixel Slate,$set,countries:Cuba
Galaxy 8,$set,countries:Cuba
Surface Pro,$set,countries:Cuba
u1,purchase,iPhone XS
u1,purchase,iPhone XR
u1,purchase,iPhone 8
u1,purchase,iPad Pro
U 2,purchase,Pixel Slate
U 2,purchase,Galaxy 8
u-3,purchase,Surface Pro
u-4,purchase,iPhone XR
u-4,purchase,iPhone 8
u-4,purchase,Galaxy 8
u1,view,Phones
u1,view,Mobile-acc
U 2,view,Phones
U 2,view,Tablets
U 2,view,Mobile-acc
u-3,view,Mobile-acc
u-4,view,Phones
u-4,view,Tablets
u-4,view,Soap
u5,view,Soap
u1,purchase,Galaxy 8
u1,purchase,Galaxy 8
u1,purchase,Galaxy 8
u1,purchase,Galaxy 8
u1,view,Galaxy 8
U 2,purchase,iPhone XR
U 2,purchase,iPhone XR
u1,view,Soap
u1,view,Soap
u-3,view,Mobile-acc
u-4,view,Mobile-acc
u-4,view,Mobile-acc
iPhone XS,$set,categories:Phones:Electronics:Apple
iPhone XR,$set,categories:Phones:Electronics:Apple
iPhone 8,$set,categories:Phones:Electronics:Apple
iPad Pro,$set,categories:Tablets:Electronics:Apple
Pixel Slate,$set,categories:Tablets:Electronics:Google
Galaxy 8,$set,categories:Phones:Electronics:Samsung
Surface Pro,$set,categories:Tablets:Electronics:Microsoft
iPhone 8,$set,countries:United States:Canada:Estados Unidos Mexicanos
iPad Pro,$set,countries:United States:Estados Unidos Mexicanos
Pixel Slate,$set,countries:United States:Canada
Galaxy 8,$set,countries:United States
Surface Pro,$set,countries:United States:Canada
u1,purchase,iPhone Case
u1,purchase, AirPods
U 2,purchase,USB-C
u-3,purchase,Sleeve
u-4,purchase,USB-C Ear Buds
u-4,purchase,USB-C
u1,view,Orders
u1,view,Past Orders
U 2,view,Orders
U 2,view,Accessories
u-3,view,Accessories
u-4,view,Orders
u-4,view,Phones
u-4,view,Clothing
u5,view,Clothing
u1,category-pref,Toys
u1,category-pref,Videos
u1,category-pref,Electronics
U 2,category-pref,Toys
U 2,category-pref,Electronics
u-3,category-pref,Videos
u-4,category-pref,Videos
u-4,category-pref,Games
u5,category-pref,Games
u1,purchase,item 1
u1,purchase,item 2
u1,purchase,item 3
u1,purchase,item 4
u1,purchase,item 5
u1,purchase,item 6
u1,purchase,item 7
u1,purchase,item 8
u1,purchase,item 9
u1,purchase,item 10
u1,purchase,item 11
u1,purchase,item 12
u1,purchase,item 13
u1,purchase,item 14
u1,purchase,item 15
u1,purchase,item 16
u1,purchase,item 17
u1,purchase,item 18
u1,purchase,item 19
u1,purchase,item 20
u1,purchase,item 21
u1,purchase,item 22
u1,purchase,item 23
u1,purchase,item 24
u1,purchase,item 25
u1,purchase,item 26
u1,purchase,item 27
u1,purchase,item 28
u1,purchase,item 29
u1,purchase,item 30
u1,purchase,item 31
u1,purchase,item 32
u1,purchase,item 33
u1,purchase,item 34
u1,purchase,item 35
u1,purchase,item 36
u1,purchase,item 37
u1,purchase,item 38
u1,purchase,item 39
u1,purchase,item 40
u1,purchase,item 41
u1,purchase,item 42
u1,purchase,item 43
u1,purchase,item 44
u1,purchase,item 45
u1,purchase,item 46
u1,purchase,item 47
u1,purchase,item 48
u1,purchase,item 49
u1,purchase,item 50
u1,purchase,item 51
u1,purchase,item 52
u1,purchase,item 53
u1,purchase,item 54
u1,purchase,item 55
u1,purchase,item 56
u1,purchase,item 57
u1,purchase,item 58
u1,purchase,item 59
u1,purchase,item 60
u1,purchase,item 61
u1,purchase,item 62
u1,purchase,item 63
u1,purchase,item 64
u1,purchase,item 65
u1,purchase,item 66
u1,purchase,item 67
u1,purchase,item 68
u1,purchase,item 69
u1,purchase,item 70
u1,purchase,item 71
u1,purchase,item 72
u1,purchase,item 73
u1,purchase,item 74
u1,purchase,item 75
u1,purchase,item 76
u1,purchase,item 77
u1,purchase,item 78
u1,purchase,item 79
u1,purchase,item 80
u1,purchase,item 81
u1,purchase,item 82
u1,purchase,item 83
u1,purchase,item 84
u1,purchase,item 85
u1,purchase,item 86
u1,purchase,item 87
u1,purchase,item 88
u1,purchase,item 89
u1,purchase,item 90
u1,purchase,item 91
u1,purchase,item 92
u1,purchase,item 93
u1,purchase,item 94
u1,purchase,item 95
u1,purchase,item 96
u1,purchase,item 97
u1,purchase,item 98
u1,purchase,item 99
u1,purchase,item 100
u1,purchase,item 101
u1,purchase,item 102
u1,purchase,item 103
u1,purchase,item 104
u1,purchase,item 105
u1,purchase,item 106
u1,purchase,item 107
u1,purchase,item 108
u1,purchase,item 109
u1,purchase,item 110
u1,purchase,item 111
u1,purchase,item 112
u1,purchase,item 113
u1,purchase,item 114
u1,purchase,item 115
u1,purchase,item 116
u1,purchase,item 117
u1,purchase,item 118
u1,purchase,item 119
u1,purchase,item 120
u1,purchase,item 121
u1,purchase,item 122
u1,purchase,item 123
u1,purchase,item 124
u1,purchase,item 125
u1,purchase,item 126
u1,purchase,item 127
u1,purchase,item 128
u1,purchase,item 129
4 changes: 4 additions & 0 deletions examples/ur/simple-integration-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@ else
diff ${actual_query_results} ${expected_test_results} > ${diffs_and_errors_file}
cat ${actual_query_results} | grep "error" >> ${diffs_and_errors_file_property_changes}

echo "Running Phase 3: User data"
python3 examples/ur/user-data.py --url ${host_url} --engineId test_ur --entityId u1 --compare-with ${user_events} >> ${diffs_and_errors_file_property_changes}
echo

if [ -s ${diffs_and_errors_file_property_changes} ]
then
echo "Input, train, query tests pass but realtime model updates test fails"
Expand Down
2 changes: 1 addition & 1 deletion examples/ur/test-ur-mobile-device-queries.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ else
export host_url=$1
fi

echo "Queries to: "${host_url}
#echo "Queries to: "${host_url}

echo
echo "+++++++++++++ User-based +++++++++++++"
Expand Down
58 changes: 58 additions & 0 deletions examples/ur/user-data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import urllib.request
import json
import argparse
import csv
import time


def get_entity_data(url, engineId, entityId, offset, limit):
with urllib.request.urlopen(f"{url}/engines/{engineId}/entities/{entityId}?from={offset}&num={limit}") as b:
return json.loads(b.read().decode('utf-8'))

def parseCsv(file):
with open(file) as csvfile:
reader = csv.DictReader(csvfile, fieldnames=['entityId', 'event', 'targetEntityId'])
result = []
for row in reader:
if row['event'] != "$set":
for j in row.items():
result.append({'entityId': j[1]})
break
return result

def filterByEntityId(entities, id):
result = []
for i in entities:
if i['entityId'] == id:
result.append(i)
return result

def compareEntities(actual, expected):
return len(actual) == len(expected)

def deleteEntities(url, engineId, entityId):
req = urllib.request.Request(f"{url}/engines/{engineId}/entities/{entityId}", method="DELETE")
with urllib.request.urlopen(req) as b:
return


if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--url', default="http://localhost:9090")
parser.add_argument('--engineId')
parser.add_argument('--entityId')
parser.add_argument('--offset', default=0)
parser.add_argument('--limit', default=1000)
parser.add_argument('--compare-with')

args = parser.parse_args()
getPassed = compareEntities(get_entity_data(args.url, args.engineId, args.entityId, args.offset, args.limit),
filterByEntityId(parseCsv(args.compare_with), args.entityId))
deleteEntities(args.url, args.engineId, args.entityId)
time.sleep(2)
deletePassed = not get_entity_data(args.url, args.engineId, args.entityId, args.offset, args.limit)

if not getPassed:
print("Get user data test fails")
if not deletePassed:
print("Delete user data test fails")
Loading