Skip to content

Commit 6626699

Browse files
committed
Merge branch 'development' of https://github.com/singnet/snet-platform-usage into metering
2 parents e7674a9 + 48c0c76 commit 6626699

File tree

8 files changed

+153
-12
lines changed

8 files changed

+153
-12
lines changed

.circleci/config.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
version: 2
3+
jobs:
4+
build:
5+
docker:
6+
- image: circleci/python:3.6.6-node
7+
- image: circleci/mysql:8.0.16
8+
environment:
9+
MYSQL_ROOT_PASSWORD: rootpw
10+
MYSQL_DATABASE: test_db
11+
MYSQL_USER: user
12+
MYSQL_PASSWORD: passw0rd
13+
working_directory: ~/singnet
14+
environment:
15+
PYTHONPATH: ~/singnet/snet-platform-usage/metering
16+
steps:
17+
- checkout
18+
- run:
19+
# Our primary container isn't MYSQL so run a sleep command until it's ready.
20+
name: Waiting for MySQL to be ready
21+
command: |
22+
for i in `seq 1 30`;
23+
do
24+
nc -z 127.0.0.1 3306 && echo Success && exit 0
25+
echo -n .
26+
sleep 1
27+
done
28+
echo Failed waiting for MySQL && exit 1
29+
- run:
30+
name: Initialise tables.
31+
command: |
32+
cd metering
33+
cp tests/alembic.ini .
34+
cp tests/test-settings.py settings.py
35+
sudo pip install alembic
36+
sudo pip install pymysql
37+
sudo pip install cryptography
38+
PYTHONPATH=$PWD
39+
alembic upgrade head
40+
- run:
41+
name: Install dependencies & compile
42+
command: |
43+
cd metering
44+
python -m compileall *.py
45+
python -m compileall */*.py
46+
sudo pip install -r requirements.txt
47+
- run:
48+
name: run tests for metering
49+
command: |
50+
cd metering
51+
PYTHONPATH=$PWD python tests/test_total_calls.py
52+
- store_artifacts:
53+
path: test-reports
54+
destination: test-reports

metering/alembic/versions/9ecbd29ee907_status_added_in_calls_tables.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818

1919
def upgrade():
2020
# ### commands auto generated by Alembic - please adjust! ###
21-
op.add_column('usage_table', sa.Column('status', sa.VARCHAR(length=225), nullable=False))
21+
op.add_column('usage_table', sa.Column(
22+
'status', sa.VARCHAR(length=225), nullable=False))
2223
# ### end Alembic commands ###
2324

2425

metering/handlers/freecall_handler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def main(event, context):
1919
try:
2020
org_id = event['queryStringParameters']['organization_id']
2121
service_id = event['queryStringParameters']['service_id']
22-
username = event['queryStringParameters']['username']
22+
username = event['requestContext']['authorizer']['claims']['email']
2323
free_call_details = usage_service.get_free_call_details(
2424
username, org_id, service_id)
2525
return_value = make_response(

metering/models.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ class OrgServiceConfigModel(Base):
1212
org_id = Column('org_id', VARCHAR(225), nullable=False)
1313
service_id = Column('service_id', VARCHAR(225), nullable=False)
1414
free_calls = Column('free_calls', Integer, nullable=False)
15-
effective_start_date = Column('effective_start_date', TIMESTAMP(timezone=True))
15+
effective_start_date = Column(
16+
'effective_start_date', TIMESTAMP(timezone=True))
1617
effective_end_date = Column('effective_end_date', TIMESTAMP(timezone=True))
17-
created_at = Column('created_at', TIMESTAMP(timezone=True), server_default=func.current_timestamp())
18+
created_at = Column('created_at', TIMESTAMP(
19+
timezone=True), server_default=func.current_timestamp())
1820

1921

2022
class UserOrgGroupModel(Base):

metering/serverless.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ custom:
2828
origin:
2929
local: localhost
3030
ropsten: "*"
31-
mainnet: "snet.com"
31+
mainnet: "*"
3232

3333
package:
3434
exclude:
@@ -53,11 +53,11 @@ functions:
5353
- http:
5454
path: /usage/freecalls
5555
method: get
56-
# authorizer:
57-
# name: user-authorizer
58-
# type: COGNITO_USER_POOLS
59-
# arn: ${file(./config.${self:provider.stage}.json):AUTHORIZER}
60-
# identitySource: method.request.header.Authorization
56+
# authorizer:
57+
# name: user-authorizer
58+
# type: COGNITO_USER_POOLS
59+
# arn: ${file(./config.${self:provider.stage}.json):AUTHORIZER}
60+
# identitySource: method.request.header.Authorization
6161
cors:
6262
origin: ${self:custom.origin.${self:provider.stage}}
6363
headers:

metering/tests/alembic.ini

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# A generic, single database configuration.
2+
3+
[alembic]
4+
# path to migration scripts
5+
script_location = alembic
6+
7+
# template used to generate migration files
8+
# file_template = %%(rev)s_%%(slug)s
9+
10+
# timezone to use when rendering the date
11+
# within the migration file as well as the filename.
12+
# string value is passed to dateutil.tz.gettz()
13+
# leave blank for localtime
14+
# timezone =
15+
16+
# max length of characters to apply to the
17+
# "slug" field
18+
# truncate_slug_length = 40
19+
20+
# set to 'true' to run the environment during
21+
# the 'revision' command, regardless of autogenerate
22+
# revision_environment = false
23+
24+
# set to 'true' to allow .pyc and .pyo files without
25+
# a source .py file to be detected as revisions in the
26+
# versions/ directory
27+
# sourceless = false
28+
29+
# version location specification; this defaults
30+
# to alembic/versions. When using multiple version
31+
# directories, initial revisions must be specified with --version-path
32+
# version_locations = %(here)s/bar %(here)s/bat alembic/versions
33+
34+
# the output encoding used when revision files
35+
# are written from script.py.mako
36+
# output_encoding = utf-8
37+
38+
sqlalchemy.url = mysql+pymysql://user:passw0rd@localhost/test_db
39+
40+
41+
# Logging configuration
42+
[loggers]
43+
keys = root,sqlalchemy,alembic
44+
45+
[handlers]
46+
keys = console
47+
48+
[formatters]
49+
keys = generic
50+
51+
[logger_root]
52+
level = WARN
53+
handlers = console
54+
qualname =
55+
56+
[logger_sqlalchemy]
57+
level = WARN
58+
handlers =
59+
qualname = sqlalchemy.engine
60+
61+
[logger_alembic]
62+
level = INFO
63+
handlers =
64+
qualname = alembic
65+
66+
[handler_console]
67+
class = StreamHandler
68+
args = (sys.stderr,)
69+
level = NOTSET
70+
formatter = generic
71+
72+
[formatter_generic]
73+
format = %(levelname)-5.5s [%(name)s] %(message)s
74+
datefmt = %H:%M:%S
75+

metering/tests/test-settings.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
DB_HOST = 'localhost'
2+
DB_NAME = 'test_db'
3+
DB_USER = 'user'
4+
DB_PWD = 'passw0rd'
5+
DB_DRIVER = 'mysql+pymysql'
6+
7+
DB_URL = f"mysql+pymysql://{DB_USER}:{DB_PWD}@{DB_HOST}/{DB_NAME}"

metering/tests/test_total_calls.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ def setUp(self):
1313
self.usage_repository = UsageRepository()
1414
self.user_org_group_repository = UserOrgGroupRepository()
1515
self.storage_service = DatabaseStorage()
16-
self.org_service_repository.get_default_session().query(OrgServiceConfigModel).delete()
16+
self.org_service_repository.get_default_session().query(
17+
OrgServiceConfigModel).delete()
1718
self.org_service_repository.get_default_session().query(UsageModel).delete()
1819
self.org_service_repository.get_default_session().query(UserOrgGroupModel).delete()
1920
service_items = list()
@@ -100,7 +101,8 @@ def test_success_usage_record(self):
100101
self.org_service_repository.get_default_session().query(UsageModel).delete()
101102

102103
def tearDown(self):
103-
self.org_service_repository.get_default_session().query(OrgServiceConfigModel).delete()
104+
self.org_service_repository.get_default_session().query(
105+
OrgServiceConfigModel).delete()
104106
self.org_service_repository.get_default_session().query(UsageModel).delete()
105107
self.org_service_repository.get_default_session().query(UserOrgGroupModel).delete()
106108

0 commit comments

Comments
 (0)