专栏首页大数据分享Java端模拟日志数据

Java端模拟日志数据

package com.xxxx.appclient;

import java.io.UnsupportedEncodingException;

import java.util.Random;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONArray;

import com.alibaba.fastjson.JSONObject;

import com.xxxx.bean.*;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* 日志行为数据模拟

*/

public class AppMain {

private final static Loggerlogger = LoggerFactory.getLogger(AppMain.class);

private static Randomrand =new Random();

// 设备id

private static int s_mid =0;

// 用户id

private static int s_uid =0;

// 商品id

private static int s_goodsid =0;

public static void main(String[] args) {

// 参数一:控制发送每条的延时时间,默认是0

Long delay = args.length >0 ? Long.parseLong(args[0]) :0L;

// 参数二:循环遍历次数

int loop_len = args.length >1 ? Integer.parseInt(args[1]) :1000;

// 生成数据

generateLog(delay, loop_len);

}

private static void generateLog(Long delay, int loop_len) {

for (int i =0; i < loop_len; i++) {

int flag =rand.nextInt(2);

switch (flag) {

case (0):

//应用启动

AppStart appStart =generateStart();

String jsonString = JSON.toJSONString(appStart);

//控制台打印

logger.info(jsonString);

break;

case (1):

JSONObject json =new JSONObject();

json.put("ap", "app");

json.put("cm", generateComFields());

JSONArray eventsArray =new JSONArray();

// 事件日志

// 商品点击,展示

if (rand.nextBoolean()) {

eventsArray.add(generateDisplay());

json.put("et", eventsArray);

}

// 商品详情页

if (rand.nextBoolean()) {

eventsArray.add(generateNewsDetail());

json.put("et", eventsArray);

}

// 商品列表页

if (rand.nextBoolean()) {

eventsArray.add(generateNewList());

json.put("et", eventsArray);

}

// 广告

if (rand.nextBoolean()) {

eventsArray.add(generateAd());

json.put("et", eventsArray);

}

// 消息通知

if (rand.nextBoolean()) {

eventsArray.add(generateNotification());

json.put("et", eventsArray);

}

// 用户后台活跃

if (rand.nextBoolean()) {

eventsArray.add(generateBackground());

json.put("et", eventsArray);

}

//故障日志

if (rand.nextBoolean()) {

eventsArray.add(generateError());

json.put("et", eventsArray);

}

// 用户评论

if (rand.nextBoolean()) {

eventsArray.add(generateComment());

json.put("et", eventsArray);

}

// 用户收藏

if (rand.nextBoolean()) {

eventsArray.add(generateFavorites());

json.put("et", eventsArray);

}

// 用户点赞

if (rand.nextBoolean()) {

eventsArray.add(generatePraise());

json.put("et", eventsArray);

}

//时间

long millis = System.currentTimeMillis();

//控制台打印

logger.info(millis +"|" + json.toJSONString());

break;

}

// 延迟

try {

Thread.sleep(delay);

}catch (InterruptedException e) {

e.printStackTrace();

}

}

}

/**

* 公共字段设置

*/

private static JSONObjectgenerateComFields() {

AppBase appBase =new AppBase();

//设备id

appBase.setMid(s_mid +"");

s_mid++;

// 用户id

appBase.setUid(s_uid +"");

s_uid++;

// 程序版本号 5,6等

appBase.setVc("" +rand.nextInt(20));

//程序版本名v1.1.1

appBase.setVn("1." +rand.nextInt(4) +"." +rand.nextInt(10));

// 安卓系统版本

appBase.setOs("8." +rand.nextInt(3) +"." +rand.nextInt(10));

// 语言es,en,pt

int flag =rand.nextInt(3);

switch (flag) {

case (0):

appBase.setL("es");

break;

case (1):

appBase.setL("en");

break;

case (2):

appBase.setL("pt");

break;

}

// 渠道号 从哪个渠道来的

appBase.setSr(getRandomChar(1));

// 区域

flag =rand.nextInt(2);

switch (flag) {

case 0:

appBase.setAr("BR");

case 1:

appBase.setAr("MX");

}

// 手机品牌 ba ,手机型号 md,就取2位数字了

flag =rand.nextInt(3);

switch (flag) {

case 0:

appBase.setBa("Sumsung");

appBase.setMd("sumsung-" +rand.nextInt(20));

break;

case 1:

appBase.setBa("Huawei");

appBase.setMd("Huawei-" +rand.nextInt(20));

break;

case 2:

appBase.setBa("HTC");

appBase.setMd("HTC-" +rand.nextInt(20));

break;

}

// 嵌入sdk的版本

appBase.setSv("V2." +rand.nextInt(10) +"." +rand.nextInt(10));

// gmail

appBase.setG(getRandomCharAndNumr(8) +"@gmail.com");

// 屏幕宽高hw

flag =rand.nextInt(4);

switch (flag) {

case 0:

appBase.setHw("640*960");

break;

case 1:

appBase.setHw("640*1136");

break;

case 2:

appBase.setHw("750*1134");

break;

case 3:

appBase.setHw("1080*1920");

break;

}

// 客户端产生日志时间

long millis = System.currentTimeMillis();

appBase.setT("" + (millis -rand.nextInt(99999999)));

// 手机网络模式3G,4G,WIFI

flag =rand.nextInt(3);

switch (flag) {

case 0:

appBase.setNw("3G");

break;

case 1:

appBase.setNw("4G");

break;

case 2:

appBase.setNw("WIFI");

break;

}

// 拉丁美洲 西经34°46′至西经117°09;北纬32°42′至南纬53°54′

// 经度

appBase.setLn((-34 -rand.nextInt(83) -rand.nextInt(60) /10.0) +"");

// 纬度

appBase.setLa((32 -rand.nextInt(85) -rand.nextInt(60) /10.0) +"");

return (JSONObject) JSON.toJSON(appBase);

}

/**

* 商品展示事件

*/

private static JSONObjectgenerateDisplay() {

AppDisplay appDisplay =new AppDisplay();

boolean boolFlag =rand.nextInt(10) <7;

// 动作:曝光商品=1,点击商品=2,

if (boolFlag) {

appDisplay.setAction("1");

}else {

appDisplay.setAction("2");

}

// 商品id

String goodsId =s_goodsid +"";

s_goodsid++;

appDisplay.setGoodsid(goodsId);

// 顺序 设置成6条吧

int flag =rand.nextInt(6);

appDisplay.setPlace("" + flag);

// 曝光类型

flag =1 +rand.nextInt(2);

appDisplay.setExtend1("" + flag);

// 分类

flag =1 +rand.nextInt(100);

appDisplay.setCategory("" + flag);

JSONObject jsonObject = (JSONObject) JSON.toJSON(appDisplay);

return packEventJson("display", jsonObject);

}

/**

* 商品详情页

*/

private static JSONObjectgenerateNewsDetail() {

AppNewsDetail appNewsDetail =new AppNewsDetail();

// 页面入口来源

int flag =1 +rand.nextInt(3);

appNewsDetail.setEntry(flag +"");

// 动作

appNewsDetail.setAction("" + (rand.nextInt(4) +1));

// 商品id

appNewsDetail.setGoodsid(s_goodsid +"");

// 商品来源类型

flag =1 +rand.nextInt(3);

appNewsDetail.setShowtype(flag +"");

// 商品样式

flag =rand.nextInt(6);

appNewsDetail.setShowtype("" + flag);

// 页面停留时长

flag =rand.nextInt(10) *rand.nextInt(7);

appNewsDetail.setNews_staytime(flag +"");

// 加载时长

flag =rand.nextInt(10) *rand.nextInt(7);

appNewsDetail.setLoading_time(flag +"");

// 加载失败码

flag =rand.nextInt(10);

switch (flag) {

case 1:

appNewsDetail.setType1("102");

break;

case 2:

appNewsDetail.setType1("201");

break;

case 3:

appNewsDetail.setType1("325");

break;

case 4:

appNewsDetail.setType1("433");

break;

case 5:

appNewsDetail.setType1("542");

break;

default:

appNewsDetail.setType1("");

break;

}

// 分类

flag =1 +rand.nextInt(100);

appNewsDetail.setCategory("" + flag);

JSONObject eventJson = (JSONObject) JSON.toJSON(appNewsDetail);

return packEventJson("newsdetail", eventJson);

}

/**

* 商品列表

*/

private static JSONObjectgenerateNewList() {

AppLoading appLoading =new AppLoading();

// 动作

int flag =rand.nextInt(3) +1;

appLoading.setAction(flag +"");

// 加载时长

flag =rand.nextInt(10) *rand.nextInt(7);

appLoading.setLoading_time(flag +"");

// 失败码

flag =rand.nextInt(10);

switch (flag) {

case 1:

appLoading.setType1("102");

break;

case 2:

appLoading.setType1("201");

break;

case 3:

appLoading.setType1("325");

break;

case 4:

appLoading.setType1("433");

break;

case 5:

appLoading.setType1("542");

break;

default:

appLoading.setType1("");

break;

}

// 页面 加载类型

flag =1 +rand.nextInt(2);

appLoading.setLoading_way("" + flag);

// 扩展字段1

appLoading.setExtend1("");

// 扩展字段2

appLoading.setExtend2("");

// 用户加载类型

flag =1 +rand.nextInt(3);

appLoading.setType("" + flag);

JSONObject jsonObject = (JSONObject) JSON.toJSON(appLoading);

return packEventJson("loading", jsonObject);

}

/**

* 广告相关字段

*/

private static JSONObjectgenerateAd() {

AppAd appAd =new AppAd();

// 入口

int flag =rand.nextInt(3) +1;

appAd.setEntry(flag +"");

// 动作

flag =rand.nextInt(5) +1;

appAd.setAction(flag +"");

// 内容类型类型

flag =rand.nextInt(6)+1;

appAd.setContentType(flag+"");

// 展示样式

flag =rand.nextInt(120000)+1000;

appAd.setDisplayMills(flag+"");

flag=rand.nextInt(1);

if(flag==1){

appAd.setContentType(flag+"");

flag =rand.nextInt(6);

appAd.setItemId(flag+"");

}else{

appAd.setContentType(flag+"");

flag =rand.nextInt(1)+1;

appAd.setActivityId(flag+"");

}

JSONObject jsonObject = (JSONObject) JSON.toJSON(appAd);

return packEventJson("ad", jsonObject);

}

/**

* 启动日志

*/

private static AppStartgenerateStart() {

AppStart appStart =new AppStart();

//设备id

appStart.setMid(s_mid +"");

s_mid++;

// 用户id

appStart.setUid(s_uid +"");

s_uid++;

// 程序版本号 5,6等

appStart.setVc("" +rand.nextInt(20));

//程序版本名v1.1.1

appStart.setVn("1." +rand.nextInt(4) +"." +rand.nextInt(10));

// 安卓系统版本

appStart.setOs("8." +rand.nextInt(3) +"." +rand.nextInt(10));

//设置日志类型

appStart.setEn("start");

// 语言es,en,pt

int flag =rand.nextInt(3);

switch (flag) {

case (0):

appStart.setL("es");

break;

case (1):

appStart.setL("en");

break;

case (2):

appStart.setL("pt");

break;

}

// 渠道号 从哪个渠道来的

appStart.setSr(getRandomChar(1));

// 区域

flag =rand.nextInt(2);

switch (flag) {

case 0:

appStart.setAr("BR");

case 1:

appStart.setAr("MX");

}

// 手机品牌 ba ,手机型号 md,就取2位数字了

flag =rand.nextInt(3);

switch (flag) {

case 0:

appStart.setBa("Sumsung");

appStart.setMd("sumsung-" +rand.nextInt(20));

break;

case 1:

appStart.setBa("Huawei");

appStart.setMd("Huawei-" +rand.nextInt(20));

break;

case 2:

appStart.setBa("HTC");

appStart.setMd("HTC-" +rand.nextInt(20));

break;

}

// 嵌入sdk的版本

appStart.setSv("V2." +rand.nextInt(10) +"." +rand.nextInt(10));

// gmail

appStart.setG(getRandomCharAndNumr(8) +"@gmail.com");

// 屏幕宽高hw

flag =rand.nextInt(4);

switch (flag) {

case 0:

appStart.setHw("640*960");

break;

case 1:

appStart.setHw("640*1136");

break;

case 2:

appStart.setHw("750*1134");

break;

case 3:

appStart.setHw("1080*1920");

break;

}

// 客户端产生日志时间

long millis = System.currentTimeMillis();

appStart.setT("" + (millis -rand.nextInt(99999999)));

// 手机网络模式3G,4G,WIFI

flag =rand.nextInt(3);

switch (flag) {

case 0:

appStart.setNw("3G");

break;

case 1:

appStart.setNw("4G");

break;

case 2:

appStart.setNw("WIFI");

break;

}

// 拉丁美洲 西经34°46′至西经117°09;北纬32°42′至南纬53°54′

// 经度

appStart.setLn((-34 -rand.nextInt(83) -rand.nextInt(60) /10.0) +"");

// 纬度

appStart.setLa((32 -rand.nextInt(85) -rand.nextInt(60) /10.0) +"");

// 入口

flag =rand.nextInt(5) +1;

appStart.setEntry(flag +"");

// 开屏广告类型

flag =rand.nextInt(2) +1;

appStart.setOpen_ad_type(flag +"");

// 状态

flag =rand.nextInt(10) >8 ?2 :1;

appStart.setAction(flag +"");

// 加载时长

appStart.setLoading_time(rand.nextInt(20) +"");

// 失败码

flag =rand.nextInt(10);

switch (flag) {

case 1:

appStart.setDetail("102");

break;

case 2:

appStart.setDetail("201");

break;

case 3:

appStart.setDetail("325");

break;

case 4:

appStart.setDetail("433");

break;

case 5:

appStart.setDetail("542");

break;

default:

appStart.setDetail("");

break;

}

// 扩展字段

appStart.setExtend1("");

return appStart;

}

/**

* 消息通知

*/

private static JSONObjectgenerateNotification() {

AppNotification appNotification =new AppNotification();

int flag =rand.nextInt(4) +1;

// 动作

appNotification.setAction(flag +"");

// 通知id

flag =rand.nextInt(4) +1;

appNotification.setType(flag +"");

// 客户端弹时间

appNotification.setAp_time((System.currentTimeMillis() -rand.nextInt(99999999)) +"");

// 备用字段

appNotification.setContent("");

JSONObject jsonObject = (JSONObject) JSON.toJSON(appNotification);

return packEventJson("notification", jsonObject);

}

/**

* 后台活跃

*/

private static JSONObjectgenerateBackground() {

AppActive_background appActive_background =new AppActive_background();

// 启动源

int flag =rand.nextInt(3) +1;

appActive_background.setActive_source(flag +"");

JSONObject jsonObject = (JSONObject) JSON.toJSON(appActive_background);

return packEventJson("active_background", jsonObject);

}

/**

* 错误日志数据

*/

private static JSONObjectgenerateError() {

AppErrorLog appErrorLog =new AppErrorLog();

String[] errorBriefs = {"at cn.lift.dfdf.web.AbstractBaseController.validInbound(AbstractBaseController.java:72)", "at cn.lift.appIn.control.CommandUtil.getInfo(CommandUtil.java:67)"}; //错误摘要

String[] errorDetails = {"java.lang.NullPointerException\\n " +"at cn.lift.appIn.web.AbstractBaseController.validInbound(AbstractBaseController.java:72)\\n " +"at cn.lift.dfdf.web.AbstractBaseController.validInbound", "at cn.lift.dfdfdf.control.CommandUtil.getInfo(CommandUtil.java:67)\\n " +"at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\\n" +" at java.lang.reflect.Method.invoke(Method.java:606)\\n"}; //错误详情

//错误摘要

appErrorLog.setErrorBrief(errorBriefs[rand.nextInt(errorBriefs.length)]);

//错误详情

appErrorLog.setErrorDetail(errorDetails[rand.nextInt(errorDetails.length)]);

JSONObject jsonObject = (JSONObject) JSON.toJSON(appErrorLog);

return packEventJson("error", jsonObject);

}

/**

* 为各个事件类型的公共字段(时间、事件类型、Json数据)拼接

*/

private static JSONObjectpackEventJson(String eventName, JSONObject jsonObject) {

JSONObject eventJson =new JSONObject();

eventJson.put("ett", (System.currentTimeMillis() -rand.nextInt(99999999)) +"");

eventJson.put("en", eventName);

eventJson.put("kv", jsonObject);

return eventJson;

}

/**

* 获取随机字母组合

*

* @param length 字符串长度

*/

private static StringgetRandomChar(Integer length) {

StringBuilder str =new StringBuilder();

Random random =new Random();

for (int i =0; i < length; i++) {

// 字符串

str.append((char) (65 + random.nextInt(26)));// 取得大写字母

}

return str.toString();

}

/**

* 获取随机字母数字组合

* @param length 字符串长度

*/

private static StringgetRandomCharAndNumr(Integer length) {

StringBuilder str =new StringBuilder();

Random random =new Random();

for (int i =0; i < length; i++) {

boolean b = random.nextBoolean();

if (b) {// 字符串

// int choice = random.nextBoolean() ? 65 : 97; 取得65大写字母还是97小写字母

str.append((char) (65 + random.nextInt(26)));// 取得大写字母

}else {// 数字

str.append(String.valueOf(random.nextInt(10)));

}

}

return str.toString();

}

/**

* 收藏

*/

private static JSONObjectgenerateFavorites() {

AppFavorites favorites =new AppFavorites();

favorites.setCourse_id(rand.nextInt(10));

favorites.setUserid(rand.nextInt(10));

favorites.setAdd_time((System.currentTimeMillis() -rand.nextInt(99999999)) +"");

JSONObject jsonObject = (JSONObject) JSON.toJSON(favorites);

return packEventJson("favorites", jsonObject);

}

/**

* 点赞

*/

private static JSONObjectgeneratePraise() {

AppPraise praise =new AppPraise();

praise.setId(rand.nextInt(10));

praise.setUserid(rand.nextInt(10));

praise.setTarget_id(rand.nextInt(10));

praise.setType(rand.nextInt(4) +1);

praise.setAdd_time((System.currentTimeMillis() -rand.nextInt(99999999)) +"");

JSONObject jsonObject = (JSONObject) JSON.toJSON(praise);

return packEventJson("praise", jsonObject);

}

/**

* 评论

*/

private static JSONObjectgenerateComment() {

AppComment comment =new AppComment();

comment.setComment_id(rand.nextInt(10));

comment.setUserid(rand.nextInt(10));

comment.setP_comment_id(rand.nextInt(5));

comment.setContent(getCONTENT());

comment.setAddtime((System.currentTimeMillis() -rand.nextInt(99999999)) +"");

comment.setOther_id(rand.nextInt(10));

comment.setPraise_count(rand.nextInt(1000));

comment.setReply_count(rand.nextInt(200));

JSONObject jsonObject = (JSONObject) JSON.toJSON(comment);

return packEventJson("comment", jsonObject);

}

/**

* 生成单个汉字

*/

private static char getRandomChar() {

String str ="";

int hightPos; //

int lowPos;

Random random =new Random();

//随机生成汉子的两个字节

hightPos = (176 + Math.abs(random.nextInt(39)));

lowPos = (161 + Math.abs(random.nextInt(93)));

byte[] b =new byte[2];

b[0] = (Integer.valueOf(hightPos)).byteValue();

b[1] = (Integer.valueOf(lowPos)).byteValue();

try {

str =new String(b, "GBK");

}catch (UnsupportedEncodingException e) {

e.printStackTrace();

System.out.println("错误");

}

return str.charAt(0);

}

/**

* 拼接成多个汉字

*/

private static StringgetCONTENT() {

StringBuilder str =new StringBuilder();

for (int i =0; i

str.append(getRandomChar());

}

return str.toString();

}

}

下面是bean对象,一个类对应一张表:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • (三)Hive基本操作命令

    1.DML(DataManipulationLanguage):数据操作语言,用来定义数据库记录; 2.DCL(DataControlLanguage):数据...

    wolf
  • (六)Hive优化

    小文件问题的影响 1.从Hive的角度看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能。

    wolf
  • (五)Hive的UDF、UDAF和UDTF自定义函数

    order by(全局排序):不经常用 sort by+distrbutre by :经常用

    wolf
  • linux和windows之间传递文件

    用户1631856
  • LeetCode 942. 增减字符串匹配

    给定只含 “I”(增大)或 “D”(减小)的字符串 S ,令 N = S.length。

    Michael阿明
  • 2020年超融合市场:13家HCI供应商将获得青睐

    2020年超融合增长势头不减,在新的一年中,有几家HCI(超融合基础设施)供应商值得关注。本文研究了几种不同类别的供应商、他们工具的特性、处理的用例以及是什么使...

    SDNLAB
  • 线性表--顺序表--静态链表(八)

    前面的链表都是使用指针类型实现的,并且都是由系统提供的函数malloc和free动态实现,被称之为动态链表,像C,C++,是拥有“指针”这类数据类型的,不需要使...

    花狗Fdog
  • 享元模式(分离与共享细粒度对象)

    目录: 1、由 HTTP 协议 联想到 对享元模式的思考 2、引入礼盒问题,作为享元模式的逆向思考 3、享元模式的实现 4、享元模式总结 5、感谢帮助...

    幺鹿
  • WordPress标题的分隔符-被转义为–的解决办法

    最近不少用户给我反馈在使用WordPress主题时,在SEO设置中的分隔符自定义成英文特殊字符横杠”-“后,会被转义成HTML字符&amp;#8211

    开心分享
  • ROS2新书推荐-从ROS2入门下一代机器人操作系统编程

    株式会社Preferred Networks エンジニア。ROS Japan Users Group を主宰。奈良先端科学技術大学院大学 情報科学研究科 博士後...

    zhangrelay

扫码关注云+社区

领取腾讯云代金券