Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Owo Sugiana
/
iso8583-web
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 47bf07df
authored
Jun 23, 2020
by
Owo Sugiana
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Lebih banyak opsi untuk web_client.py
1 parent
c865e1be
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
132 additions
and
113 deletions
CHANGES.txt
README.rst
contrib/web-client.py → iso8583_web/scripts/web_client.py
setup.py
CHANGES.txt
View file @
47bf07d
0.1.7 2020-05-12
----------------
- Bug fixed append_others()
- web-client.py tidak lagi berada di contrib melainkan sebagai
bin/iso8583_web_client
0.1.6 2020-04-09
----------------
...
...
README.rst
View file @
47bf07d
...
...
@@ -107,7 +107,7 @@ membuat aplikasi teller bank. Pada ``test-bjb.ini`` aktifkan section
Kemudian restart daemon-nya. Setelah *echo established* dengan daemon pemda
lakukan *echo request* dengan cara::
$ ~/env/bin/
python contrib/web-client.py
$ ~/env/bin/
iso8583_web_client
Hasilnya menjadi seperti ini::
...
...
contrib/web-
client.py
→
iso8583_web/scripts/web_
client.py
View file @
47bf07d
...
...
@@ -16,6 +16,20 @@ end_threads = []
durations
=
{}
json_responses
=
{}
default_url
=
'http://localhost:7000/rpc'
default_host
=
'pemda'
default_count
=
1
help_url
=
'default '
+
default_url
help_host
=
'default '
+
default_host
help_count
=
'default {}'
.
format
(
default_count
)
help_invoice_id
=
'wajib saat --payment dan --reversal'
help_amount
=
'wajib saat --payment dan --reversal'
help_ntb
=
'opsional saat --payment, wajib saat --reversal'
help_stan
=
'opsional saat --payment, wajib saat --reversal'
help_bit
=
'bit tambahan, contoh: --bit=42:TOKOPEDIA'
help_conf
=
'konfigurasi tambahan, contoh untuk multi: --conf=pajak:bphtb'
def
error
(
s
):
print
(
'ERROR: {}'
.
format
(
s
))
...
...
@@ -29,27 +43,6 @@ def required(name, default=None):
p
[
name
]
=
value
or
default
def
create_thread
(
func
,
args
=
[]):
thread
=
Thread
(
target
=
func
,
args
=
args
)
# Exit the server thread when the main thread terminates
thread
.
daemon
=
True
return
thread
def
send
(
p
):
key
=
p
[
'id'
]
log_info
(
'Request: {}'
.
format
(
p
))
start
=
time
()
try
:
resp
=
requests
.
post
(
url
,
data
=
json
.
dumps
(
p
),
headers
=
headers
)
durations
[
key
]
=
time
()
-
start
json_resp
=
resp
.
json
()
log_info
(
'Response: {}'
.
format
(
json_resp
))
json_responses
[
key
]
=
json_resp
finally
:
end_threads
.
append
(
key
)
def
log_info
(
s
):
t
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S.
%
f'
)
t
=
t
[:
-
3
]
...
...
@@ -57,93 +50,116 @@ def log_info(s):
print
(
msg
)
default_url
=
'http://localhost:7000/rpc'
default_host
=
'pemda'
default_count
=
1
default_method
=
'echo'
help_url
=
'default '
+
default_url
help_host
=
'default '
+
default_host
help_count
=
'default {}'
.
format
(
default_count
)
help_method
=
'default '
+
default_method
help_invoice_id
=
'dibutuhkan saat --method inquiry, payment, atau reversal'
help_amount
=
'dibutuhkan saat --method payment dan reversal'
help_ntb
=
'dibutuhkan saat --method payment dan reversal'
help_stan
=
'dibutuhkan saat --method payment dan reversal'
help_bit
=
'bit tambahan, contoh: --bit=42:TOKOPEDIA'
help_conf
=
'konfigurasi tambahan, contoh untuk multi: --conf=pajak:bphtb'
parser
=
ArgumentParser
()
parser
.
add_argument
(
'--url'
,
default
=
default_url
,
help
=
help_url
)
parser
.
add_argument
(
'--host'
,
default
=
default_host
,
help
=
help_host
)
parser
.
add_argument
(
'--count'
,
type
=
int
,
default
=
default_count
,
help
=
help_count
)
parser
.
add_argument
(
'--method'
,
default
=
default_method
,
help
=
help_method
)
parser
.
add_argument
(
'--invoice-id'
,
help
=
help_invoice_id
)
parser
.
add_argument
(
'--amount'
,
type
=
int
,
help
=
help_amount
)
parser
.
add_argument
(
'--ntb'
,
help
=
help_ntb
)
parser
.
add_argument
(
'--stan'
,
help
=
help_stan
)
parser
.
add_argument
(
'--bit'
,
help
=
help_bit
)
parser
.
add_argument
(
'--conf'
,
help
=
help_conf
)
option
=
parser
.
parse_args
(
sys
.
argv
[
1
:])
url
=
option
.
url
count
=
option
.
count
p
=
dict
(
host
=
option
.
host
)
if
option
.
method
!=
'echo'
:
p
[
'invoice_id'
]
=
option
.
invoice_id
if
option
.
method
in
(
'payment'
,
'reversal'
):
required
(
'amount'
)
if
option
.
method
==
'payment'
:
required
(
'ntb'
,
datetime
.
now
()
.
strftime
(
'
%
y
%
m
%
d
%
H
%
m
%
s'
))
required
(
'stan'
,
datetime
.
now
()
.
strftime
(
'
%
H
%
M
%
S'
))
def
get_option
(
argv
):
parser
=
ArgumentParser
()
parser
.
add_argument
(
'--url'
,
default
=
default_url
,
help
=
help_url
)
parser
.
add_argument
(
'--host'
,
default
=
default_host
,
help
=
help_host
)
parser
.
add_argument
(
'--count'
,
type
=
int
,
default
=
default_count
,
help
=
help_count
)
parser
.
add_argument
(
'--invoice-id'
,
help
=
help_invoice_id
)
parser
.
add_argument
(
'--payment'
,
action
=
'store_true'
)
parser
.
add_argument
(
'--reversal'
,
action
=
'store_true'
)
parser
.
add_argument
(
'--amount'
,
type
=
int
,
help
=
help_amount
)
parser
.
add_argument
(
'--ntb'
,
help
=
help_ntb
)
parser
.
add_argument
(
'--stan'
,
help
=
help_stan
)
parser
.
add_argument
(
'--bit'
,
help
=
help_bit
)
parser
.
add_argument
(
'--conf'
,
help
=
help_conf
)
return
parser
.
parse_args
(
argv
)
class
App
:
def
__init__
(
self
,
argv
):
self
.
option
=
get_option
(
argv
)
def
set_transaction
(
self
,
p
):
p
[
'invoice_id'
]
=
self
.
option
.
invoice_id
if
self
.
option
.
payment
or
self
.
option
.
reversal
:
required
(
'amount'
)
if
self
.
option
.
method
==
'payment'
:
required
(
'ntb'
,
datetime
.
now
()
.
strftime
(
'
%
m
%
d
%
H
%
m
%
s'
))
required
(
'stan'
,
datetime
.
now
()
.
strftime
(
'
%
H
%
M
%
S'
))
else
:
required
(
'ntb'
)
required
(
'stan'
)
if
self
.
option
.
bit
:
bits
=
dict
()
for
t
in
self
.
option
.
bit
.
split
(
','
):
bit
,
value
=
t
.
split
(
':'
)
bits
[
bit
]
=
value
p
[
'bits'
]
=
bits
if
self
.
option
.
conf
:
conf
=
dict
()
for
t
in
self
.
option
.
conf
.
split
(
','
):
key
,
val
=
t
.
split
(
':'
)
conf
[
key
]
=
val
p
[
'conf'
]
=
conf
def
send
(
self
,
p
):
key
=
p
[
'id'
]
log_info
(
'Request: {}'
.
format
(
p
))
start
=
time
()
try
:
resp
=
requests
.
post
(
self
.
option
.
url
,
data
=
json
.
dumps
(
p
),
headers
=
headers
)
durations
[
key
]
=
time
()
-
start
json_resp
=
resp
.
json
()
log_info
(
'Response: {}'
.
format
(
json_resp
))
json_responses
[
key
]
=
json_resp
finally
:
end_threads
.
append
(
key
)
def
create_thread
(
self
,
args
=
[]):
thread
=
Thread
(
target
=
self
.
send
,
args
=
args
)
# Exit the server thread when the main thread terminates
thread
.
daemon
=
True
return
thread
def
run
(
self
):
p
=
dict
(
host
=
self
.
option
.
host
)
if
self
.
option
.
invoice_id
:
self
.
set_transaction
(
p
)
if
self
.
option
.
payment
:
method
=
'payment'
elif
self
.
option
.
reversal
:
method
=
'reversal'
else
:
method
=
'inquiry'
else
:
required
(
'ntb'
)
required
(
'stan'
)
if
option
.
bit
:
bits
=
dict
()
for
t
in
option
.
bit
.
split
(
','
):
bit
,
value
=
t
.
split
(
':'
)
bits
[
bit
]
=
value
p
[
'bits'
]
=
bits
if
option
.
conf
:
conf
=
dict
()
for
t
in
option
.
conf
.
split
(
','
):
key
,
val
=
t
.
split
(
':'
)
conf
[
key
]
=
val
p
[
'conf'
]
=
conf
data
=
dict
(
method
=
option
.
method
,
params
=
[
p
],
jsonrpc
=
'2.0'
)
for
i
in
range
(
count
):
data
[
'id'
]
=
i
thread
=
create_thread
(
send
,
[
dict
(
data
)])
threads
[
i
]
=
thread
for
key
in
threads
:
thread
=
threads
[
key
]
thread
.
start
()
sleep
(
0.2
)
while
threads
:
sleep
(
1
)
if
not
end_threads
:
continue
i
=
end_threads
[
0
]
if
i
in
threads
:
thread
=
threads
[
i
]
thread
.
join
()
del
threads
[
i
]
index
=
end_threads
.
index
(
i
)
del
end_threads
[
index
]
for
key
in
durations
:
val
=
durations
[
key
]
resp
=
json_responses
[
key
]
if
'error'
in
resp
:
break
result
=
resp
[
'result'
]
if
result
[
'code'
]
==
0
:
stan
=
result
[
'data'
][
'11'
]
else
:
stan
=
'-'
print
(
'thread {} stan {} {} detik'
.
format
(
key
,
stan
,
val
))
method
=
'echo'
data
=
dict
(
method
=
method
,
params
=
[
p
],
jsonrpc
=
'2.0'
)
for
i
in
range
(
self
.
option
.
count
):
data
[
'id'
]
=
i
thread
=
self
.
create_thread
([
dict
(
data
)])
threads
[
i
]
=
thread
for
key
in
threads
:
thread
=
threads
[
key
]
thread
.
start
()
sleep
(
0.2
)
while
threads
:
sleep
(
1
)
if
not
end_threads
:
continue
i
=
end_threads
[
0
]
if
i
in
threads
:
thread
=
threads
[
i
]
thread
.
join
()
del
threads
[
i
]
index
=
end_threads
.
index
(
i
)
del
end_threads
[
index
]
for
key
in
durations
:
val
=
durations
[
key
]
resp
=
json_responses
[
key
]
if
'error'
in
resp
:
break
result
=
resp
[
'result'
]
if
result
[
'code'
]
==
0
:
stan
=
result
[
'data'
][
'11'
]
else
:
stan
=
'-'
msg
=
'thread {} stan {} {} detik'
.
format
(
key
,
stan
,
val
)
log_info
(
msg
)
def
main
(
argv
=
sys
.
argv
[
1
:]):
app
=
App
(
argv
)
app
.
run
()
setup.py
View file @
47bf07d
...
...
@@ -47,7 +47,7 @@ tests_require = [
setup
(
name
=
'iso8583_web'
,
version
=
version
,
description
=
'
Web untuk menampilkan log ISO8583
'
,
description
=
'
Daemon ISO8583 yang memiliki web service
'
,
long_description
=
README
+
'
\n\n
'
+
CHANGES
,
classifiers
=
[
'Programming Language :: Python'
,
...
...
@@ -71,8 +71,9 @@ setup(
'main = iso8583_web:main'
,
],
'console_scripts'
:
[
'initialize_iso8583_web_db = iso8583_web.scripts.initialize_db:main'
,
'iso8583 = iso8583_web.scripts.forwarder:main'
,
'iso8583_web_client = iso8583_web.scripts.web_client:main'
,
'initialize_iso8583_web_db = iso8583_web.scripts.initialize_db:main'
,
]
},
)
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment