github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/console/console.go (about)

     1  // Copyright 2015 unirita Inc.
     2  // Created 2015/04/10 shanxia
     3  
     4  package console
     5  
     6  import (
     7  	"fmt"
     8  	"os"
     9  
    10  	"github.com/unirita/cuto/log"
    11  )
    12  
    13  // USAGE表示用の定義メッセージ
    14  const USAGE = `Usage :
    15      master.exe [-v] [-n Jobnetwork] [-s] [-c ConfigFile] [-r Instance Id]
    16  
    17  Option :
    18      -v             :   Print master version.
    19      -n bpmn name   :   Designate a bpmn file name.(Without extensions.)
    20      -s             :   Execute Jobnetwork.
    21      -c ConfigFile  :   Designate config file path.
    22                         If it is omitted, '<Current Directory>/master.ini' will be used.
    23      -r Instance Id :   To re-run the abnormally terminated Jobnetwork.
    24  
    25  Copyright 2015 unirita Inc.
    26  `
    27  
    28  var stack_msg = []string{"CTM019E", "CTS019E", "CTU003E"}
    29  
    30  // showユーティリティのUSAGE表示用の定義メッセージ
    31  const USAGE_SHOW = `Usage :
    32      show.exe [-v] [-jobnet="bpmn file name"] [-From="From date"] [-to="To date"] [-status="normal" | "abnormal" | "running"] [-format="json" | "csv"] [-nid="Instance Id"]
    33  
    34  Option :
    35      -v                 :   Print master version.
    36      -jobnet=jobnet     :   Designate a bpmn name.
    37      -from=yyyymmdd     :   From date is designated.
    38      -to=yyyymmdd       :   To date is designated.
    39      -status=normal     :   Status indicates only something of NORMAL-END.
    40      -status=abnormal   :   Status indicates only something of ABNORMAL-END.
    41      -status=running    :   Status indicates only something of RUNNING.
    42      -format=json       :   It outputs by the form of JSON.
    43      -format=csv        :   It outputs by the form of CSV.
    44  	-utc               :   Consider timezone as UTC.
    45  	-nid=InstanceId    :   Designate a instance id.
    46      
    47  When omitting [-from] and [-to], only Jobnetwork begun today is indicated.
    48  	
    49  Copyright 2015 unirita Inc.
    50  `
    51  
    52  // コンソールメッセージ一覧
    53  var msgs = map[string]string{
    54  	"CTM001I": "GOCUTO MASTER STARTED. PID [%d] VERSION [%v]",
    55  	"CTM002I": "GOCUTO MASTER ENDED. RC [%d]",
    56  	"CTM003E": "INVALID ARGUMENT.",
    57  	"CTM004E": "FAILED TO READ EXPAND JOB CONFIG FILE [%s].",
    58  	"CTM005E": "CONFIG PARM IS NOT EXACT FORMAT. REASON [%s]",
    59  	"CTM006W": "INVALID VALUE [%s / %s]. USE DEFAULT VALUE [%s]",
    60  	"CTM007I": "BIND ADDRESS[%v] USED PORT[%v].",
    61  	"CTM008I": "REMINDER: EVALUATION PERIOD WILL EXPIRE IN [%d] DAYS.",
    62  	"CTM009I": "LICENSE VALID TILL %04d/%02d/%02d.",
    63  	"CTM010E": "FAILED TO READ BPMN FILE [%s].",
    64  	"CTM011E": "[%s] IS NOT EXACT FORMAT. REASON [%s]",
    65  	"CTM012I": "[%s] STARTED. INSTANCE [%d]",
    66  	"CTM013I": "[%s] ENDED. INSTANCE [%d] STATUS [%s]",
    67  	"CTM014I": "SENDED REQUEST [%s] START MESSAGE. ID [%s] NODE [%s] PORT [%d]",
    68  	"CTM015I": "RECEIVED RESPONSE [%s] END MESSAGE. ID [%s] STATUS [%s]",
    69  	"CTM016W": "UNABLE TO CONNECT SERVANT. NODE[%s] PORT[%d] EC [%d] MSG [%s]",
    70  	"CTM017W": "UNABLE TO SEND MESSAGE. NODE[%s] PORT[%d] EC [%d] MSG [%s]",
    71  	"CTM018W": "TIME OUT WAITING JOB EXECUTE.",
    72  	"CTM019E": "EXCEPTION OCCURED - %s",
    73  	"CTM020I": "BPMN FILE [%s] IS VALID.",
    74  	"CTM021E": "COULD NOT INITIALIZE LOGGER. REASON[%s]",
    75  	"CTM022I": "JOB [%s] IS RUNNING FOR %d MINUTES.",
    76  	"CTM023I": "JOB [%s] STARTED AT NODE [%s]. INSTANCE [%d] JOBID [%s].",
    77  	"CTM024I": "JOB [%s] ENDED AT NODE [%s]. INSTANCE [%d] JOBID [%s] STATUS [%v].",
    78  	"CTM025W": "JOB [%s] ABNORMAL ENDED AT NODE [%s]. INSTANCE [%d] JOBID [%s] STATUS [%v] DETAIL [%s].",
    79  	"CTM026I": "SEE JOBLOG FILE [%s] ON NODE [%s].",
    80  	"CTM027W": "JOB [%s] REQUEST FAILED. RETRYING...(%d of %d)",
    81  	"CTM028W": "JOB [%s] REQUEST FAILED. TRYING TO REQUEST SECONDARY SERVANT[%s].",
    82  	"CTM029I": "INSTANCE [%d] ALREADY ENDED WITH NO ERROR.",
    83  	"1":       "",
    84  	"CTS001I": "GOCUTO SERVANT STARTED. PID [%v] VERSION [%s]",
    85  	"CTS002I": "GOCUTO SERVANT ENDED. RC [%d].",
    86  	"CTS003E": "INVALID ARGUMENT.",
    87  	"CTS004W": "FAILED TO READ CONFIG FILE [%s]. USE DEFAULT VALUE",
    88  	"CTS005E": "CONFIG PARM IS NOT EXACT FORMAT. REASON [%s]",
    89  	"CTS006W": "CONFIG PARM [%s / %s] USE DEFAULT VALUE [%v]",
    90  	"CTS007I": "BIND ADDRESS[%v] USED PORT[%v].",
    91  	"CTS008I": "REMINDER: EVALUATION PERIOD WILL EXPIRE IN [%d] DAYS.",
    92  	"CTS009I": "LICENSE VALID TILL %s/%s/%s.",
    93  	"CTS010I": "JOB [%s] STARTED. INSTANCE [%d] ID [%s] PID [%d].",
    94  	"CTS011I": "JOB [%s] ENDED. INSTANCE [%d] ID [%s] STATUS [%d] RC [%d].",
    95  	"CTS012E": "NOT FOUND JOB FILE [%s].",
    96  	"CTS013E": "ENABLE TO EXECUTE JOB [%s].",
    97  	"CTS014I": "RECEIVED REQUEST MESSAGE.",
    98  	"CTS015E": "RECEIVED MESSAGE IS NOT EXACT FORMAL.DETAIL[%s]",
    99  	"CTS016I": "EXECUTION OF JOB, I STAND BY. INSTANCE [%d] ID [%s] NAME [%s].",
   100  	"CTS017I": "SENDED RESPONSE MESSAGE.",
   101  	"CTS018E": "ENABLE TO SEND RESPONSE MESSAGE.",
   102  	"CTS019E": "EXCEPTION OCCURED - %s",
   103  	"CTS020I": "SERVANT CHILD STARTED. PID[%d]",
   104  	"CTS021I": "SERVANT CHILD ENDED. RC[%d]",
   105  	"CTS022E": "UNABLE TO OUTPUT JOBLOG. MSG[%s]",
   106  	"CTS023E": "COULD NOT INITIALIZE LOGGER. REASON[%s]",
   107  	"2":       "",
   108  	"CTU001I": "SHOW UTILITY STARTED. VERSION [%v]",
   109  	"CTU002I": "SHOW UTILITY ENDED. RC [%d].",
   110  	"CTU003E": "EXCEPTION OCCURED - %v",
   111  	"CTU004E": "AN INTERNAL ERROR OCCURRED. - %v",
   112  	"CTU005W": "FAILED TO JOB INFORMATION NID[%v]. - %v",
   113  	"CTU006E": "NOT FOUND CONFIG FILE. - %v",
   114  }
   115  
   116  // 標準出力へメッセージコードcodeに対応したメッセージを表示する。
   117  //
   118  // param : code メッセージコードID。
   119  //
   120  // param : a... メッセージの書式制御文字に渡す内容。
   121  //
   122  // return : 出力文字数。
   123  //
   124  // return : エラー情報。
   125  func Display(code string, a ...interface{}) (int, error) {
   126  	msg := GetMessage(code, a...)
   127  	log.Info(msg)
   128  
   129  	for _, s := range stack_msg {
   130  		if code == s {
   131  			PrintStack()
   132  		}
   133  	}
   134  	return fmt.Println(msg)
   135  }
   136  
   137  // 標準エラー出力へメッセージコードcodeに対応したメッセージを表示する。
   138  //
   139  // param : code メッセージコードID。
   140  //
   141  // param : a... メッセージの書式制御文字に渡す内容。
   142  //
   143  // return : 出力文字数。
   144  //
   145  // return : エラー情報。
   146  func DisplayError(code string, a ...interface{}) (int, error) {
   147  	msg := GetMessage(code, a...)
   148  	log.Error(msg)
   149  
   150  	for _, s := range stack_msg {
   151  		if code == s {
   152  			PrintStack()
   153  		}
   154  	}
   155  	return fmt.Fprintln(os.Stderr, msg)
   156  }
   157  
   158  // 出力メッセージを文字列型で取得する。
   159  //
   160  // param : code メッセージコードID。
   161  //
   162  // param : a... メッセージの書式制御文字に渡す内容。
   163  //
   164  // return : 取得したメッセージ
   165  func GetMessage(code string, a ...interface{}) string {
   166  	return fmt.Sprintf("%s %s", code, fmt.Sprintf(msgs[code], a...))
   167  }