zoukankan      html  css  js  c++  java
  • 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
    }
    

      

  • 相关阅读:
    Linux系统编程——特殊进程之僵尸进程
    怎样让你的安卓手机瞬间变Firefox os 畅玩firefox os 应用
    新手学JavaScript都要学什么?
    《解读window核心编程》 之 注冊表
    指针知识梳理10-指向数组的指针
    简易迷宫游戏
    CC++控制台颜色设置类
    实用的开放平台整理
    java 集合交并补
    PHP 标准库 SPL 之数据结构栈(SplStack)简单实践
  • 原文地址:https://www.cnblogs.com/shenfengok/p/6135326.html
Copyright © 2011-2022 走看看