高性能实时数仓建设(四):模拟数据代码

package com.zyd.billondataCollect;


import com.alibaba.fastjson.JSONObject;
import com.zyd.input.app.AppProductLog;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

/**
 * 模拟http请求类
 */
public class AppGenerateData {
    private static Random random = new Random();
    private static int[] days = new int[]{2, 4, 3, 5};    
    private static String[] userIds = new String[]{"1", "2"};  //用户id
    private static String[] deviceIds = new String[]{"deviceId1", "deviceId2"};    //设备id
    private static String openTimeStamp = generateTime(new Date()) + ""; //打开时间
    private static String leaveTimeStamp = (generateTime(new Date()) + 10 * 1000) + ""; //退出时间
    private static String[] appPlatforms = new String[]{"andriod", "ios"}; //平台 : 安卓/IOS
    private static String[] deviceStyle = new String[]{"iphone11", "小米10", "iphone5s", "荣耀10"}; //型号
    private static String[] brands = new String[]{"华为", "小米", "苹果"};   //品牌
    private static String[] screenSizes = new String[]{"200*300", "300*500", "400*200"};  //分辨率
    private static String[] osTypes = new String[]{"andriod4.5", "andriod5.6", "ios5", "ios6", "ios7"};  //操作系统

    private static String[] channelIds = new String[]{"1", "2"};  //频道id
    private static String[] productTypeId = new String[]{"2", "3"};   //产品类别id
    private static String[] productId = new String[]{"1", "2", "3"};   //产品id
    private static String scanTime = generateTime(new Date()) + "";    //浏览时间
    private static String jumpTime = (generateTime(new Date()) + 5 * 1000) + "";    //跳出商品时间
    private static String[] ips = new String[]{"192.168.1.2", "192.168.1.3", "192.168.18.5"};  //用户app访问的ip
    private static String[] country = new String[]{"china"}; //国家
    private static String[] provinces = new String[]{"安徽", "上海", "广东", "湖南"}; //省
    private static String[] cities = new String[]{"芜湖市", "南京市", "无锡市", "深圳市"}; //市

    private static String[] networks = new String[]{"Wifi", "4G", "5G"}; //网络方式
    private static String[] operators = new String[]{"移动", "联通", "电信"};     //运营商
    private static String[] appVersions = new String[]{"2.3.1", "2.4.1", "3.0.2"}; //app版本
    private static String[] appChannels = new String[]{"安卓市场", "小米市场", "华为市场"};  //渠道




    private static AppProductLog generateData() {
        AppProductLog appProductLog = new AppProductLog();

        appProductLog.setUserId(userIds[random.nextInt(userIds.length)]);
        appProductLog.setDeviceId(deviceIds[random.nextInt(deviceIds.length)]);
        appProductLog.setAppPlatform(appPlatforms[random.nextInt(appPlatforms.length)]);
        appProductLog.setDeviceStyle(deviceStyle[random.nextInt(deviceStyle.length)]);
        appProductLog.setBrand(brands[random.nextInt(brands.length)]);
        appProductLog.setScreenSize(screenSizes[random.nextInt(screenSizes.length)]);
        appProductLog.setOsType(osTypes[random.nextInt(osTypes.length)]);
        appProductLog.setProductId(productId[random.nextInt(productId.length)]);
        appProductLog.setProductTypeId(productTypeId[random.nextInt(productTypeId.length)]);
        appProductLog.setChannelId(channelIds[random.nextInt(channelIds.length)]);
        appProductLog.setIp(ips[random.nextInt(ips.length)]);
        appProductLog.setCountry(country[random.nextInt(country.length)]);
        appProductLog.setProvince(provinces[random.nextInt(provinces.length)]);
        appProductLog.setCity(cities[random.nextInt(cities.length)]);
        appProductLog.setNetwork(networks[random.nextInt(networks.length)]);
        appProductLog.setOperator(operators[random.nextInt(operators.length)]);
        appProductLog.setAppVersion(appVersions[random.nextInt(appVersions.length)]);
        appProductLog.setAppChannel(appChannels[random.nextInt(appChannels.length)]);
        appProductLog.setOpenTimeStamp(openTimeStamp);
        appProductLog.setLeaveTimeStamp(leaveTimeStamp);
        appProductLog.setScanTime(scanTime);
        appProductLog.setJumpTime(jumpTime);
        return appProductLog;

    }

    private static long generateTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, -days[random.nextInt(days.length)]);
        long resultTime = calendar.getTime().getTime();
        return resultTime;
    }

    private static void postHttpMethod(String urlPath, String data) {
        try {
            URL url = new URL(urlPath);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            //请求方式
            urlConnection.setRequestMethod("POST");
            //支持输入输出
            urlConnection.setDoInput(true);
            urlConnection.setDoOutput(true);
            //是否支持重定向
            urlConnection.setInstanceFollowRedirects(true);
            //使用缓存
            urlConnection.setUseCaches(true);

            //设置请求头信息
            // urlConnection.setRequestProperty("User-Agent","Mozilla/5.0(Windows NT 6.1;Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0");
            urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0(Windows NT 6.1;Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0");
            urlConnection.setRequestProperty("Content-Type", "application/json");
            urlConnection.setConnectTimeout(5 * 1000);

            //连接
            urlConnection.connect();

            //设置输出流,向文件中写入
            OutputStream outputStream = urlConnection.getOutputStream();
            outputStream.write(data.getBytes());
            //刷新缓冲区
            outputStream.flush();

            outputStream.close();
            //输入流
            InputStream inputStream = urlConnection.getInputStream();
            //请求返回状态码
            int httpCode = urlConnection.getResponseCode();
            byte[] inputData = new byte[1024];
            StringBuffer stringBuffer = new StringBuffer();
            while (inputStream.read(inputData, 0, 1024) != -1) {
                stringBuffer.append(new String(inputData));
            }
            System.out.println("状态码:" + httpCode);
            System.out.println("消息:" + stringBuffer.toString());
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        AppProductLog appProductLog = generateData();
        System.out.println(JSONObject.toJSONString(appProductLog));
        postHttpMethod("http://localhost:8091/collectAppData", JSONObject.toJSONString(appProductLog).toString());

    }

}

你可能感兴趣的:(高性能实时数仓建设)