프로프레임에서 제공하는 pfmtcl 명령을 이용하여 거래를 재현할 수 있다. 하나이던 여러개 이던 거래 전문을 별도의 파일로 저장한 후에 다음 쉘을 이용하여 거래를 재현할 수 있다.
아래 쉘 프로그램은 text 로 저장된 거래 전문 파일을 한 line 씩 읽으면서 pfmtcl 거래를 하는 예제이다. 이 때 pfmtcl 은 거래 전문을 읽어서 IPPR로 거래를 날릴 수 있는 기능이 제공되어야 한다. (여기서는 pfmtcl -s 명령이라고 가정한다, 사이트 마다 옵션이 다름) 사용옵션은 pfmtcl 명령을 실행하면 사용법을 보여주기도 한다. 또는 매뉴얼을 참고한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 |
[test_all.sh]
#!/usr/bin/ksh
# ==================================================================================================
# @file test_all.sh
# @brief 일괄거래테스트 실행
#
# @dep-program
# @dep-infile
# @dep-outfile
#
# @usage
#
# @history
# 버 전 : 성 명 : 일 자 : 근거 자료 : 변 경 내 용
# -------- ------ -------- ----------- ---------------------------------------------
# V1.00 : 최성환 : YYYYMMDD : 프로젝트 : 신규 작성
#
# ==================================================================================================
# **************************************** env definition ******************************************
# ------------------------------------------------------------------------------------------------ #
# 실행 환경 정의 : 디렉토리 및 TEAM / SUBTEAM 정의
# ------------------------------------------------------------------------------------------------ #
date=`date +%Y/%m/%d`
st_date=`date +%H:%M:%S`
HOSTNAME=`hostname`
USER=`whoami`
# ************************************* execute (sql/program) *************************************
# ----------------------------------------------------------------------------------------------- #
# 프로그램 실행
# ----------------------------------------------------------------------------------------------- #
if [ $# -eq 0 ];then
echo "Usage : `basename $0` ilog.dat"
exit;
fi
CNT=0
while IFS= read -r line;do
DATETIME=`date +%Y%m%d%H%M%S`
GLOB_ID=`echo "$line" | cut -c 9-40`
# echo "${GLOB_ID}"
./pfmtcl -s "$line" >$GLOB_ID.log 2>&1
# cat $GLOB_ID.log
if [ -f "$GLOB_ID.log" ];then
ERR_C=`grep ERR_C "$GLOB_ID.log" | grep ERR_C | tail -1 | cut -c 75-`
rm -f "$GLOB_ID.log" > /dev/null 2>&1
else
ERR_C="NO"
fi
DATETIME2=`date +%Y%m%d%H%M%S`
((CNT=CNT+1))
((TTIME=DATETIME2-DATETIME))
echo "${DATETIME}:${GLOB_ID} > ${ERR_C} $CNT $TTIME"
done < $1 |
cs |
실행방법은 다음과 같다.
1 |
test_all.sh b.dat |
cs |
여기서 b.dat 에는 거래 전문 여러개가 들어있다. 보다 대량 거래 재현을 위하여 수만건의 거래를 모아서 순차적으로 날려보기도 한다. 위의 쉘에서는 거래를 날린 후 나오는 output 에서 ERR_C 문자가 들어있는 라인을 찾아서 응답코드를 잘라내서 보여준다. 이 결과를 파일로 별도로 모으고 싶다면 " > 파일명" 기능을 이용하면 된다.
실행결과에서 에러코드가 리턴된 경우 에러코드를 보여주고 정상리턴된 경우는 에러코드란이 비어 있다. 에러코드 뒤에는 전문의 일련번호와 수행시간을 표시해 주고 있다.
1
2
3
4
5 |
20170608154153:20170103030220100360000900549900 > [ ] 1 1
20170608154153:20170105030220100000001347098700 > [ ] 2 1
20170608154153:20170102030220100360000833421300 > [ ] 3 1
20170608154153:20170101ngtestap4534312250200201 > [APP00055] 4 1
20170608154153:20170107000602694821080000060201 > [ ] 5 1 |
cs |
'컴퓨터활용 > 유닉스' 카테고리의 다른 글
디렉토리 사용량 조회 (1) | 2017.06.18 |
---|---|
디스크 사용량 조회 (0) | 2017.06.18 |
AIX dbx 사용 core 분석 (2) | 2017.03.24 |
티베로 쿼리 실행 쉘 예제 (0) | 2016.10.29 |
유닉스 쉘에서 스페이스 잘리지 않게 유지하고 읽는 방법 (0) | 2016.10.29 |