• go log repl


    package main
    
    import (
    	"fmt"
    	"os/exec"
    	"regexp"
    	"strconv"
    	"strings"
    	"time"
    )
    
    func main() {
    	info()
    
    	for {
    		var line string
    		fmt.Scanf("%s
    ", &line)
    		isFinish, message := preprocess(line)
    		if isFinish {
    			msg(message)
    			continue
    		}
    		echo, url, err := newLogHelper(line).process()
    		if err != nil {
    			msg(err.Error())
    			continue
    		}
    		msg(echo)
    		args := []string{"cmd", "/c", "start", "chrome"}
    		cmd := exec.Command(args[0], append(args[1:], url)...)
    		cmd.Start()
    	}
    }
    
    func msg(str string) {
    	fmt.Println(str)
    }
    
    func info() {
    	titleList = []string{"可定检查", "中间产品层", "创建订单"}
    	keyList = []string{"member_hotel_check_avail", "get_corp_hotel_data", "member_hotel_reservation", "contract_hotel_check_avail", "get_corp_hotel_data", "soa2__create_order_log"}
    	app150120 = []string{""}
    	helpText = "k+数字(默认是k1):
    
     "
    	for i := 0; i < len(titleList); i++ {
    		helpText += fmt.Sprintf("%d", i+1) + "." + titleList[i] + "
    
     "
    	}
    	helpText += "默认会员,协议在数字前加0
    
    d/h+数字(默认是d7):
    
     1.一天(h是小时)内日志
    
     2.两天(h是小时)内日志
    
     以此类推...
    
    o+数字:
    
     打开ordeidr=数字的日志
    
    r+数字:
    
     打开roomId=数字的日志
    
    u+卡号:
    
     开的uid=卡号的日志
    
    c+数字:
    
     打开cityID=数字的日志
    
    help:查看命令
    
    ee切换生产/测试环境"
    	msg(helpText)
    }
    
    func preprocess(str string) (isFinish bool, msg string) {
    	switch {
    	case str == "help":
    		return true, helpText
    	case str == "ee":
    		isPro = !isPro
    		if isPro {
    			return true, "切换为生产环境日志查询..."
    		} else {
    			return true, "切换为测试环境日志查询..."
    		}
    
    	default:
    		return false, ""
    
    	}
    }
    
    var titleList []string
    var keyList []string
    var helpText string
    var isPro bool
    var app150120 []string
    
    const support = 3
    
    type LogHelper struct {
    	cmd, o, r, u, c string //o==orderid ,r == roomid,u=uid,c=cityid
    	k, d, h         int
    }
    
    func newLogHelper(line string) *LogHelper {
    	return &LogHelper{cmd: strings.ToLower(line)}
    }
    
    func (h *LogHelper) process() (string, string, error) {
    	if strings.Contains(h.cmd, "ee") {
    		isPro = !isPro
    	}
    	h.k = h.getNumber("k")
    	h.d = h.getNumber("d")
    	h.h = h.getNumber("h")
    
    	h.o = h.getStr("o")
    	h.r = h.getStr("r")
    	h.u = h.getStr("u")
    	h.c = h.getStr("c")
    	var dateStr, title, key string
    	var beginTime time.Time
    	endTime := time.Now()
    	echo := "正在打开"
    
    	switch {
    	case h.d > 0:
    		beginTime = endTime.AddDate(0, 0, -h.d)
    		echo += to_s(h.d) + "天内的"
    	case h.h > 0:
    		beginTime = endTime.Add(time.Hour * time.Duration(-h.h))
    		echo += to_s(h.h) + "小时内的"
    	default:
    		beginTime = endTime.AddDate(0, 0, -7)
    		echo += "7天内的"
    	}
    	dateStr = h.getDateStr(beginTime, endTime)
    	tags := "~tags="
    	switch {
    	case h.k > 0 && h.k < support:
    		key = "key=" + keyList[h.k-1]
    		title = "会员" + titleList[h.k-1]
    	case h.k >= support:
    		key = "key=" + keyList[h.k-1]
    		title = "协议" + keyList[h.k-support]
    	default:
    		// if !strings.Contains(h.cmd, "o") {
    		//     key = "key=" + keyList[0]
    		//     title = "会员" + titleList[0]
    		// }
    	}
    	if len(key) > 4 {
    		tags += key + ";"
    	}
    	echo += title
    	if h.o != "" {
    		ss := "orderId=" + h.o
    		echo += "&" + ss
    		tags += ss + ";"
    	}
    
    	if h.r != "" {
    		ss := "roomId=" + h.r
    		echo += "&" + ss
    		tags += ss + ";"
    	}
    
    	if h.u != "" {
    		ss := "uid=" + h.u
    		echo += "&" + ss
    		tags += ss + ";"
    	}
    
    	if h.c != "" {
    		ss := "cityId=" + h.c
    		echo += "&" + ss
    		tags += ss + ";"
    	}
    	if isPro {
    		echo += "(生产环境)"
    	} else {
    		echo += "(测试环境)"
    	}
    
    	echo += "日志..."
    	var appid string
    	if contains(app150120, strings.Replace(key, "key=", "", 1)) {
    		appid = "~app=150120"
    	}
    	url := "http://logging.fws.qa.nt.ctripcorp.com/#?"
    
    	if isPro {
    		url = "http://logging.ctripcorp.com/#?"
    	}
    
    	url += dateStr + appid + tags
    	return echo, url, nil
    }
    
    func (helper *LogHelper) getStr(prefix string) string {
    	reg := regexp.MustCompile(prefix + `(d+)`)
    	slice := reg.FindStringSubmatch(helper.cmd)
    	if len(slice) > 1 {
    		return slice[1]
    	}
    	return ""
    }
    
    func (h *LogHelper) getNumber(prefix string) int {
    	str := h.getStr(prefix)
    	if str != "" && str[0] == '0' {
    		return to_i(str) + support - 1
    	}
    	return to_i(str)
    }
    func (h *LogHelper) getDateStr(beginTime time.Time, endTime time.Time) string {
    	return fmt.Sprintf("fromDate=%s~toDate=%s", beginTime.Format("2006-01-02_15:04:05"), endTime.Format("2006-01-02_15:04:05"))
    }
    
    func to_s(num int) string {
    	return strconv.Itoa(num)
    }
    
    func to_i(str string) int {
    	num, err := strconv.Atoi(str)
    	if err != nil {
    		return 0
    	}
    	return num
    }
    
    func contains(slice []string, item string) bool {
    	set := make(map[string]struct{}, len(slice))
    	for _, s := range slice {
    		set[s] = struct{}{}
    	}
    
    	_, ok := set[item]
    	return ok
    }
    

      

  • 相关阅读:
    【今日CV 视觉论文速览】 19 Nov 2018
    【numpy求和】numpy.sum()求和
    【今日CV 视觉论文速览】16 Nov 2018
    【今日CV 视觉论文速览】15 Nov 2018
    poj 2454 Jersey Politics 随机化
    poj 3318 Matrix Multiplication 随机化算法
    hdu 3400 Line belt 三分法
    poj 3301 Texas Trip 三分法
    poj 2976 Dropping tests 0/1分数规划
    poj 3440 Coin Toss 概率问题
  • 原文地址:https://www.cnblogs.com/shenfengok/p/6135326.html
Copyright © 2020-2023  润新知