打点统计——2(批量生成随机日志样本)
2019-04-14 21:39
281 查看
run.go:
package main import ( "./uas" "flag" "math/rand" "net/url" "os" "strconv" "strings" "time" ) type resource struct { url string target string start int end int } func ruleResource() []resource{ var res []resource //首页 r1 := resource{ url: "http://localhost/", target: "", start: 0, end: 0, } //列表页 r2 := resource{ url: "http://localhost/list/{$id}.html", target: "{$id}", start: 1, end: 21, } //详情页 r3 := resource{ url: "http://localhost/movie/{$id}.html", target: "{$id}", start: 1, end: 12924, } res = append(res, r1, r2, r3) return res } func buildUrl(res []resource) []string { var list []string for _, resItem := range res { if len(resItem.target) == 0 { list = append(list, resItem.url) }else { for i := resItem.start; i <= resItem.end; i++ { urlStr := strings.Replace(resItem.url, resItem.target, strconv.Itoa(i), -1) list = append(list, urlStr) } } } return list } func makeLog(current, refer, ua string) string { u := url.Values{} u.Set("time", "1") u.Set("url", current) u.Set("refer", refer) u.Set("ua", ua) paramsStr := u.Encode() logTemplate := "127.0.0.1 - - [14/Apr/2019:20:07:42 +0800] \"OPTIONS /dig?{$paramsStr} HTTP/1.1\" 499 0 \"-\" \"{$ua}\" \"-\"" log := strings.Replace(logTemplate, "{$paramsStr}", paramsStr, -1) log = strings.Replace(log, "{$ua}", ua, -1) return log } //随机 func randInt(min, max int) int { r := rand.New(rand.NewSource(time.Now().UnixNano())) if min > max { return max } return r.Intn(max-min) + min } func main() { total := flag.Int("total", 100, "创建多少行日志") filePath := flag.String("filePath", "F:/phpStudy/PHPTutorial/nginx/logs/access.log", "日志文件路径") //想生效还要调用解析方法 flag.Parse() //fmt.Println(*total, *filePath) //构造出真实的网站url集合 res := ruleResource() list := buildUrl(res) //按照要求,生成$total行日志内容 logStr := "" for i := 1; i <= *total; i++ { //随机选 currentUrl := list[randInt(0, len(list)-1)] referUrl := list[randInt(0, len(list)-1)] ua := uas.UaList[randInt(0, len(uas.UaList)-1)] logStr = logStr + makeLog(currentUrl, referUrl, ua) + "\n" //和随机种子一样的间隔,尽可能保证随机性 time.Sleep(time.Nanosecond) } //放到循环外一次写入 fd, _ := os.OpenFile(*filePath, os.O_RDWR|os.O_APPEND, 0644 ) fd.Write([]byte(logStr)) fd.Close() }
uas.go(各种浏览器信息):
package uas var UaList = []string { "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;", " Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1", "Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", " Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10", }
运行程序(随机生成10000条日志):
go run run.go --total=10000 --filePath="F:/phpStudy/PHPTutorial/nginx/logs/access.log"
相关文章推荐
- 批量随机生成身份证号码
- OpenCart之批量生成定制或随机优惠券(Bulk Coupons)
- Java 批量随机生成身份证号码
- java旅行第二站--JavaSE第二天--统计随机生成整数的各个数字的次数
- 企业Shell面试题1:批量生成随机字符文件名案例
- C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密
- 利用Ajax生成ProgressBar:实现同类大批量数据批量生成Html,并实时显示进度条,可查看处理日志
- 使用 Elizabeth 为应用生成随机样本数据
- Shell脚本批量创建用户并随机生成密码
- Java随机生成批量Ip
- C++ 实现从0~100中随机生成50个数,统计出现的数字最大值和最小值,输出出现最多的次数及对应的数字
- 4.基于Golang协程实现流量统计系统-用GO批量模拟生成log日志
- C# 批量生成随机密码必须包含数字和字母并用加密算法加密
- Java 批量随机生成身份证号码
- OpenCart之批量生成定制或随机优惠券(Bulk Coupons)
- Map实现从0~100中随机生成50个数,统计出现的数字最大值和最小值,输出出现最多的次数及对应的数字
- 【小程序】JAVA实现从10~50中随机生成50个数,统计出现的数字及次数,输出出现最多的次数及对应的数字,按数字升序排列。
- 随机生成正太分布样本原理及python实现
- python实现从几张图片随机裁剪出上百上千张特定尺寸大小的图片(不超20行)可用于生成负样本
- 随机生成50个数,范围在【10,50】,统计每个数字出现的次数以及出现次数最多的数字与它的个数。