Commit be1b2f74 by Solo Group

test 5 @ 500

1 parent 4245acc2
...@@ -46,6 +46,7 @@ Konfigurasi aplikasi terdapat pada section module:: ...@@ -46,6 +46,7 @@ Konfigurasi aplikasi terdapat pada section module::
samsat_banten_kd_produk = 5 samsat_banten_kd_produk = 5
samsat_banten_persen_denda = 0 samsat_banten_persen_denda = 0
samsat_banten_max_bln_denda = 0 samsat_banten_max_bln_denda = 0
samsat_banten_timeout = 0
Running: Running:
...@@ -54,23 +55,46 @@ Untuk menjalankan aplikasi :: ...@@ -54,23 +55,46 @@ Untuk menjalankan aplikasi ::
iso8583 {ini_file} iso8583 {ini_file}
Catatan Script:
======= =======
Masih terdapat hal-hal yang harus di perbaiki pada:
1. Perbaikan pada ``site-package/opensipkd/__init__.py`` dan
``site-package/opensipkd/iso8583/__init__.py`` diisi dengan::
_path_ = _import('pkgutil').extend_path(path, __name_) * Initialize database ::
env/bin/initialize_bjb_samsat_db [config file]
2. Perbaikan pada ``site-package/opensipkd/tcp/connection.py``:: * Test api ::
def on_socket_error(self, err): env/bin/test-info-samsat-banten -c config_file -m module <option>
# aagusti digunakan untuk menghindari pemutusan sepihak dari server
# apabila timout saat menanti raw
if self.conf['listen'] and not self.conf['echo']:
self.set_connected_time()
return
self.close() Option::
--------
-m, --module [get_tagihan, get_kd_bayar, inquiry, response, reversal]
-i, --invoice_no Nomor Invoice
-k, --ktp NIK/Nomor KTP
-p, --no_pol Nomor Polisi
-a, --amount Jumlah Tagihan
* Contoh :
* Mendapatkan nomor bayar::
env/bin/test-info-samsat-banten -c etc/iso8583.ini -m get_kd_bayar \
-k 1234567890123456
-p A1234AA
* Inquiry::
env/bin/test-info-samsat-banten -c etc/iso8583.ini -m inquiry \
-i 1234567890123456
* Payment::
env/bin/test-info-samsat-banten -c etc/iso8583.ini -m payment \
-i 1234567890123456
-a 12345
* Reversal::
env/bin/test-info-samsat-banten -c etc/iso8583.ini -m reversal \
-i 1234567890123456
-a 12345
Catatan
=======
Masih terdapat hal-hal yang harus di perbaiki pada:
1. Perbaikan pada ``site-package/opensipkd/__init__.py`` dan
``site-package/opensipkd/iso8583/__init__.py`` diisi dengan::
_path_ = _import('pkgutil').extend_path(path, __name_)
2. Perbaikan pada ``site-package/opensipkd/tcp/connection.py``::
def on_socket_error(self, err):
# aagusti digunakan untuk menghindari pemutusan sepihak dari server
# apabila timout saat menanti raw
if self.conf['listen'] and not self.conf['echo']:
self.set_connected_time()
return
self.close()
2. Perbaikan pada ``site-package/opensipkd/tcp/connection.py``::
def on_socket_error(self, err):
# aagusti digunakan untuk menghindari pemutusan sepihak dari server
# apabila timout saat menanti raw
if self.conf['listen'] and not self.conf['echo']:
self.set_connected_time()
return
self.close()
4. Perbaikan pada ``opensipkd/iso8583/doc.py``::
def get_value(self, bit):
v = self.getBit(bit)
type_ = self.getBitType(bit)
return v
# if type_.find('LL') < 0:
# return v
# size_length = len(type_)
# return v[size_length:]
\ No newline at end of file \ No newline at end of file
import logging
import os
import signal
import sys
from pprint import pprint
from threading import Thread
from time import (sleep, )
from iso8583_web.read_conf import (ip_conf)
from iso8583_web.read_conf import (read_conf, name_conf)
from iso8583_web.scripts.forwarder import get_db
from opensipkd.string import (exception_message, dict_to_str, )
from opensipkd.tcp.client import Client as BaseClient
from opensipkd.tcp.connection import (
ConnectionManager as BaseConnectionManager,
join_ip_port,
)
from pyramid.paster import setup_logging
from datetime import datetime
from opensipkd.iso8583.bjb.samsat.banten.doc import Doc
from optparse import OptionParser
from iso8583_web.scripts.forwarder import (
CommonConnection, iso_to_dict, create_thread, Log, parser_threads,
log_info, to_str)
from iso8583_web.scripts.forwarder import (
logs, conn_mgr,)
try:
from configparser import (
ConfigParser,
NoOptionError,
)
except ImportError:
from ConfigParser import (
ConfigParser,
NoOptionError,
)
INQUIRY_CODE = '301099'
def get_option(argv):
# bank = conf.host['streamer'] #'bjb'
pars = OptionParser()
count = 10
pars.add_option('-i', '--invoice-id')
pars.add_option('-c', '--count', default=count, help="Default %s" % count)
option, remain = pars.parse_args(argv)
if not option.invoice_id:
print('--invoice-id harus diisi.')
return
return option
# todo: harus nya diimport saja dari scripts inquiry
def inquiry_request(iso, invoice_id, bank_id=None):
bank_id = bank_id and bank_id or '110'
kini = datetime.now()
iso.setBit(2, kini.strftime('%Y%m%d%H%M%S'))
iso.set_transaction_code(INQUIRY_CODE)
iso.setBit(12, kini.strftime('%H%M%S'))
iso.setBit(13, kini.strftime('%m%d'))
iso.setBit(15, kini.strftime('%m%d'))
iso.setBit(18, '6010')
iso.setBit(22, '021')
iso.setBit(32, bank_id)
iso.setBit(33, bank_id.rjust(5, '0')) # forwarder
iso.setBit(37, kini.strftime('%H%M%S'))
iso.setBit(41, '000')
iso.setBit(42, '000000000000000')
iso.setBit(43, 'Nama Bank')
iso.setBit(49, '390')
iso.setBit(61, invoice_id)
class TestInquiry(object):
def __init__(self, argv, client):
self.option = get_option(argv)
if not self.option:
return
self.invoice_id = self.option.invoice_id.replace('-', '')
# print(name_conf['banten'])
self.conf = name_conf[client]
self.bank_id = 'bank_id' in self.conf and self.conf['bank_id'] or '110'
self.count = self.option.count
def run(self):
if not self.option:
return
# print('\nBank kirim inquiry request')
req_iso = Doc(conf=self.conf)
req_iso.inquiry_request()
inquiry_request(req_iso, self.invoice_id, self.bank_id)
raw = self.get_raw(req_iso)
return raw
def get_raw(self, iso):
msg = 'MTI {mti}'.format(mti=iso.getMTI())
# print(msg)
# pprint(iso_to_dict(iso)) # getBitsAndValues())
raw = iso.getRawIso()
# sleep(1)
# print([raw])
return raw
def usage(argv):
cmd = os.path.basename(argv[0])
print('usage: %s <config_uri>\n'
'(example: "%s test.ini -i invoice_id [-c count]")' % (cmd, cmd))
sys.exit(1)
def check_connection():
log_info("Check Connection")
for ip_port in ip_conf:
if ip_port in conn_mgr:
index = -1
while True:
index += 1
if not conn_mgr[index:]:
break
this_ip_port, conn = conn_mgr[index]
if this_ip_port != ip_port:
continue
if conn.running:
continue
conn_mgr.remove(index)
break
continue
cfg = ip_conf[ip_port]
if cfg['listen']:
continue
start_client(cfg)
sleep(5)
def check_job():
log_info("Check Job")
for ip_port, connection in conn_mgr:
if not connection.running:
continue
if not connection.is_connected():
continue
iso = connection.job.get_iso()
if not iso:
continue
# connection.log_encode(iso)
raw = iso.getRawIso()
connection.send(raw)
def check_parser():
log_info("Check Parser")
i = -1
while True:
i += 1
if not parser_threads[i:]:
break
parser, thread = parser_threads[i]
if not parser.running:
thread.join()
del parser_threads[i]
i -= 1
iso = {}
import socket, sys, time
BUFFER_SIZE = 1024
import threading
REQUESTS = 100
SLEEP = 1
TIMEOUT = 10
THREADS = 5
threads = []
def receiving(s):
while True:
try:
raw = s.recv(BUFFER_SIZE)
print("Received {} ".format(raw[:30]))
except:
print(sys.exc_info()[0])
break
def sending(s, thrs, test_inquiry ):
i = 0
for i in range(REQUESTS):
raw = test_inquiry.run()
raw = raw + '\x03'
l = str(len(raw)).zfill(4)
raw = l+raw
print("Sending Message Thread {} ke {}: {}".format(thrs, i, raw[:30]))
s.send(raw.encode("ASCII"))
TCP_IP = '127.0.0.1'
TCP_PORT = 8589
def main(argv):
config_uri = argv[1]
setup_logging(config_uri)
conf = read_conf(config_uri)
print(conf)
get_db(conf)
log = logging.getLogger(__file__)
logs.append(log)
# running.append(True)
test_inquiry = TestInquiry(argv, 'banten')
running = True
while running == True:
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Connecting to {} PORT {}...".format(TCP_IP, TCP_PORT))
s.connect((TCP_IP, TCP_PORT))
s.settimeout(TIMEOUT)
print("Connected!")
# Thread For Receiving Message
thread = threading.Thread(target=receiving, args=[s])
thread.daemon = True
thread.start()
threads.append(thread)
# Thread For Receiving Message
for i in range(THREADS):
thread = threading.Thread(target=sending, args=[s, i, test_inquiry])
thread.daemon = True
thread.start()
threads.append(thread)
running = False
except:
running = False
print(sys.exc_info()[0])
time.sleep(1)
for thread in threads:
thread.join()
if __name__ == '__main__':
main(sys.argv)
...@@ -158,6 +158,7 @@ class Doc(Transaction): ...@@ -158,6 +158,7 @@ class Doc(Transaction):
invoice_id_raw = invoice_id_raw.ljust(16, ' ') invoice_id_raw = invoice_id_raw.ljust(16, ' ')
invoice_id_raw = invoice_id_raw.ljust(32, '0') invoice_id_raw = invoice_id_raw.ljust(32, '0')
# self.log_info(invoice_id_raw) # self.log_info(invoice_id_raw)
print(">>>DEBUG>>>", invoice_id_raw )
r = self.invoice_id.set_raw(invoice_id_raw) r = self.invoice_id.set_raw(invoice_id_raw)
if not r: if not r:
return self.ack_invalid_number_2(invoice_id_raw) return self.ack_invalid_number_2(invoice_id_raw)
...@@ -172,6 +173,7 @@ class Doc(Transaction): ...@@ -172,6 +173,7 @@ class Doc(Transaction):
return r return r
def get_data(self): def get_data(self):
print(self.mod_conf)
return dict(kd_bank=str(self.get_bank_id()).rjust(3, '0'), return dict(kd_bank=str(self.get_bank_id()).rjust(3, '0'),
kd_channel=self.from_iso.get_channel(), kd_channel=self.from_iso.get_channel(),
invoice_no=self.invoice_id_raw[:16], invoice_no=self.invoice_id_raw[:16],
......
...@@ -29,3 +29,7 @@ class Job(NetworkJob): ...@@ -29,3 +29,7 @@ class Job(NetworkJob):
iso = self.create_iso() iso = self.create_iso()
iso.reversal_request(p['data']) iso.reversal_request(p['data'])
return iso return iso
def on_receive_raw(self, raw):
self.echo_time = None
print('LEWAT', raw)
...@@ -201,6 +201,16 @@ class Transaction(BaseTransaction, Log): ...@@ -201,6 +201,16 @@ class Transaction(BaseTransaction, Log):
def get_bit_invoice_profile(self): def get_bit_invoice_profile(self):
return 61 return 61
def get_value(self, bit):
v = self.getBit(bit)
type_ = self.getBitType(bit)
return v
# if type_.find('LL') < 0:
# return v
# size_length = len(type_)
# return v[size_length:]
def get_invoice_id_raw(self): def get_invoice_id_raw(self):
return self.get_value(self.get_bit_invoice_profile()) return self.get_value(self.get_bit_invoice_profile())
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!