上一节课我们已经架设好了一个网站。,但是因为我们的网站没有流量 。也生成不了大量的日志,靠我们自己点击生成那点日志也不够测试的。所以这次我们就用GO语言批量生成我们想要的日志。

好了。我们开始写代码

我用的IDE工具是GOLAND,没有为什么,只因为强大,好用。我承认我是小白。只会用GOLAND。用VIM开发的大神请忽略我。

首先介绍一下,本次生成的日志是根据网站生成的日志格式来模拟生成的。

功能是:

根据自定义的生成自己想要的条数的日志。

可以自定义生成路径。

可以批量随机生成日志。

生成大量真实的user_agent的日志。

有current和refer功能

好了。现在我们开始写代码吧。

首先。我觉得程序应该分三大块功能

第一部分,就是生成url集合,要生成的是首页,列表页,详情页。

第二部分。根据真实的日志模板来大量生成日志

第三部分,把日志写入到log中

先来写第一部分。

我们来分析一下网站的结构,

首页只有一个网页,没有分页。

列表页有分页。来看一下数据库有多少个分类

发现有21个分类。我们就知道。列表页网址要生成21个

再看一下详情页。详情页和列表页相似,我们看一下有多少个电影资源,就会有多少个网页

看了一下数据库,详情页有178个网址。也就是说有178个网页

再分析一下网址的规律

首页:http://www.rizhi.test:8888/

列表页:http://www.rizhi.test:8888/list/1.html

详情页:http://www.rizhi.test:8888/movie/174.html

首页就一个网址,不需要处理

列表页和详情页发现后面有一个id,只要换这个ID就可以改变网页的资源。所以我们可以利用程序来批量替换这个ID

我们先用一个结构体来处理替换ID这个方法

url 要替换的网址

target 要替换的关键字

start 开始页

end 终止页

有了这个结构体。我们就可以生成指定格式的url了

我们来创建一个函数

 

该函数的功能是创建 首页,列表页,详情页的结构体对象,并赋值

有了这三个结构体对象,我们就可以生成网址了。

现在开始生成网址,看下面代码

先建一个 string字符串数组,用来存储生成后的url集合

遍历resource对象,首先判断一下首页需不需要target替换,如果 len(resItem.target)==0 那么就直接把resItem.url追加到list中

否则的话就把列表页和详情页的url也追加到list中,追的之前要先把{$id}替换一下

追加完后我们返回这个list集合就可以了,这样的话我们就得到了所有的url

现在有了网址后,我们就可以生成批量生成日志了。

因为我们的功能是想创建几条日志就可以创建几条,创建条数我们自定义。

因为是批量创建日志,我们用for循环就可以了。代码如下:

 

我们用一个func makeLog()来生成指定格式的日志

makeLog代码如下

因为生成指定格式,我们按日志模板生成

127.0.0.1 - - [02/Jun/2018:14:53:12 +0800] "OPTIONS /dig?{paramsStr} HTTP/1.1" 200 43 "-" "{$ua}" "-"
以上是某条日志的模板,我们需要只需要替换两个地方。

第一个地方是包括refer,time,ua,url,用url.Value{}方法来生成

 

第二个地方是user_agent

Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8J2

 

我们接下来对生成的模板替换一下相应的地方替换成我们的value

return log返回替换好的log模板即可。

然后我们将生成的日志写出到dig.log中就行了

还有一个问题。我们的current,refer,ua需要随机选择。模拟就要模拟的真实一些

 

在for循环中我们把传到makeLog的参数随机选择。

randInt代码如下,产生随机数

 

最后我们一次性把生成的日志写出即可

 

用的是os.OpenFile方法,用完记得close哦

好了。附上完整代码

 

通过进入run.go所在的路径,输入go run run.go --total=10000就能生成10000条数据,这样自己想设置多少行就多少行数据啦

 

好了。下一章我们编写统计系统的框架。