134 lines
4.4 KiB
Python
134 lines
4.4 KiB
Python
|
# -*- coding: utf-8 -*-
|
|||
|
import jinja2
|
|||
|
import datetime
|
|||
|
import subprocess
|
|||
|
import random
|
|||
|
import shutil
|
|||
|
|
|||
|
from pathlib import Path
|
|||
|
from faker import Faker
|
|||
|
from chinese_calendar import is_workday
|
|||
|
|
|||
|
|
|||
|
NOW = Path(__file__).parent
|
|||
|
ETC = NOW.parent / "etc"
|
|||
|
OUTPUT = NOW.parent / "output"
|
|||
|
|
|||
|
|
|||
|
def faker_datas(number=7):
|
|||
|
"""
|
|||
|
生成日志模板所需要的内容,一天一个默认7天,排除掉工作日(排除掉的也算一天)
|
|||
|
"""
|
|||
|
f = Faker(locale="zh_CN")
|
|||
|
# 用来存所有的
|
|||
|
datas = []
|
|||
|
# 现在的时间
|
|||
|
today = datetime.datetime.now().date()
|
|||
|
# 默认生成前7天的数据
|
|||
|
for n in range(0, number):
|
|||
|
# 前N天
|
|||
|
date = today + datetime.timedelta(days=-n)
|
|||
|
# 判断是不是工作日
|
|||
|
if not is_workday(date):
|
|||
|
continue
|
|||
|
# 用来保存1天所需要的内容
|
|||
|
diary_log = {}
|
|||
|
# 创建日期
|
|||
|
diary_log["create_date"] = date
|
|||
|
# 创建时间,控制在8点~11点之间
|
|||
|
str_time1 = date.strftime("%Y-%m-%d ") + "08:00:00"
|
|||
|
start_time = datetime.datetime.strptime(str_time1, "%Y-%m-%d %H:%M:%S")
|
|||
|
str_time2 = date.strftime("%Y-%m-%d ") + "11:00:00"
|
|||
|
end_time = datetime.datetime.strptime(str_time2, "%Y-%m-%d %H:%M:%S")
|
|||
|
|
|||
|
CreationTime = f.date_time_between(start_date=start_time, end_date=end_time)
|
|||
|
diary_log["CreationTime"] = CreationTime
|
|||
|
# 修改时间,比创建时间晚6~10小时
|
|||
|
LastWriteTime = CreationTime + datetime.timedelta(
|
|||
|
hours=f.pyint(min_value=6, max_value=10),
|
|||
|
seconds=f.pyint(min_value=1, max_value=300),
|
|||
|
)
|
|||
|
diary_log["LastWriteTime"] = LastWriteTime
|
|||
|
|
|||
|
# 访问时间,比修改时间晚1~n天
|
|||
|
LastAccessTime = LastWriteTime + datetime.timedelta(
|
|||
|
days=f.pyint(min_value=0, max_value=n),
|
|||
|
seconds=f.pyint(min_value=1, max_value=300),
|
|||
|
)
|
|||
|
diary_log["LastAccessTime"] = LastAccessTime
|
|||
|
# 随机的状态,成功失败比 8:2
|
|||
|
status_list = {"sucess": 80, "failed": 20}
|
|||
|
diary_log["status1"] = random_weight(status_list)
|
|||
|
|
|||
|
datas.append(diary_log)
|
|||
|
|
|||
|
return datas
|
|||
|
|
|||
|
|
|||
|
def random_weight(weight_data):
|
|||
|
"""
|
|||
|
按照权重,随机取值
|
|||
|
eg:
|
|||
|
weight_data = {'a': 10, 'b': 40, 'c': 50}
|
|||
|
random_weight(weight_data)
|
|||
|
"""
|
|||
|
total = sum(weight_data.values()) # 权重求和
|
|||
|
ra = random.uniform(0, total) # 在0与权重和之前获取一个随机数
|
|||
|
curr_sum = 0
|
|||
|
ret = None
|
|||
|
# keys = weight_data.iterkeys() # 使用Python2.x中的iterkeys
|
|||
|
keys = weight_data.keys() # 使用Python3.x中的keys
|
|||
|
for k in keys:
|
|||
|
curr_sum += weight_data[k] # 在遍历中,累加当前权重值
|
|||
|
if ra <= curr_sum: # 当随机数<=当前权重和时,返回权重key
|
|||
|
ret = k
|
|||
|
break
|
|||
|
return ret
|
|||
|
|
|||
|
|
|||
|
def main(number):
|
|||
|
# 获取数据
|
|||
|
datas = faker_datas(number)
|
|||
|
# 初始化输出目录
|
|||
|
if OUTPUT.exists():
|
|||
|
shutil.rmtree(OUTPUT)
|
|||
|
OUTPUT.mkdir()
|
|||
|
|
|||
|
# 根据模板来生成数据
|
|||
|
template_file = ETC / "template.md.j2"
|
|||
|
for day_log in datas:
|
|||
|
# 读取模板
|
|||
|
jinja2_env = jinja2.Environment()
|
|||
|
tempate_data = open(template_file, encoding="utf-8").read()
|
|||
|
# 渲染模板
|
|||
|
temp_out = jinja2_env.from_string(tempate_data).render({"datas": day_log})
|
|||
|
|
|||
|
# 输出结果
|
|||
|
file_name = day_log["create_date"].strftime("%Y-%m-%d") + ".md"
|
|||
|
output_file = OUTPUT / file_name
|
|||
|
with open(output_file, "w", encoding="utf-8") as f:
|
|||
|
f.writelines(temp_out)
|
|||
|
|
|||
|
# 修改生成文本的创建时间、修改时间和访问时间
|
|||
|
# ls 'sysin.txt' | foreach-object { $_.CreationTime = '02/02/2021 01:01:01'; $_.LastWriteTime = '01/01/2021 01:01:01'; $_.LastAccessTime = '03/03/2021 01:01:01' }
|
|||
|
args = (
|
|||
|
"powershell.exe"
|
|||
|
+ ' "ls '
|
|||
|
+ "'"
|
|||
|
+ str(output_file)
|
|||
|
+ "'"
|
|||
|
+ " | foreach-object { $_.CreationTime = '"
|
|||
|
+ day_log["CreationTime"].strftime("%m/%d/%Y %H:%M:%S")
|
|||
|
+ "'; $_.LastWriteTime = '"
|
|||
|
+ day_log["LastWriteTime"].strftime("%m/%d/%Y %H:%M:%S")
|
|||
|
+ "'; $_.LastAccessTime = '"
|
|||
|
+ day_log["LastAccessTime"].strftime("%m/%d/%Y %H:%M:%S")
|
|||
|
+ "' }\""
|
|||
|
)
|
|||
|
subprocess.call(args, shell=True)
|
|||
|
|
|||
|
|
|||
|
if __name__ == "__main__":
|
|||
|
# 生成30天的数据
|
|||
|
main(30)
|