| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- 'use strict'
- const puppeteer = require('puppeteer');
- const DataListen = require('./collectors/listen');
- const MongoClient = require('mongodb').MongoClient;
- const axios = require('axios')
- const moment = require('moment')
- const fs = require('fs');
- const os = require('os')
- // 'C://bauer_V2/input_image';
- const username = '*****@zd-junhao.com';
- const password = '*****';
- (async () => {
- try {
- let onlyone = 0;
- let timers = 0; //定时器
- let TOKEN = '';
- let mongo = await MongoClient.connect('mongodb://admin:******@a.zd-junhao.com:63443/cutter?authSource=admin', { poolSize: 5 });
- let data2 = await mongo.collection('bauerInfo') // 设备清单库
- let data3 = await mongo.collection('DeviceRealStatus') //单独设备状态
- let page = null;
- let browser = null;
- let allpages = null;
- await intBeaur()
- // 初始化
- async function intBeaur() {
- page = null;
- onlyone = 0;
- timers = 0;
- TOKEN = '';
- clearInterval(timers)
- if (allpages) clearInterval(allpages.timer)
- allpages = null;
- if (browser) await browser.close(); browser = null;
- browser = await puppeteer.launch({
- headless: false,//不使用无头chrome模式
- timeout: 0,
- defaultViewport: { width: 1920, height: 1180 }
- });
- page = await BauerLogin(username, password)
- console.log('初始化完成');
- page.on('response', getResponse);
- }
- // 监听设备列表请求获取token
- async function getResponse(response) {
- const url = response.url();
- if (url.includes('/equipment/dashboard-equipment-list')) {
- try {
- onlyone++
- if (onlyone == 3) {
- console.log('开始抓取', url);
- const responseData = await response.text();
- const bauerMachines = JSON.parse(responseData);
- // 拿到token=>定时获取设备状态及报警信息
- clearInterval(timers)
- const token = await response.request().headers().authorization
- await getDeviceInfo(token);
- // 更新数据库+打开其他页面
- for (const [index, machine] of bauerMachines.entries()) {
- const number = machine.id;
- delete machine.id;
- let dbData = await data2.findOne({ number: number });
- machine.number = number;
- if (dbData) {
- await data2.update({ number: number }, { $set: machine });
- } else {
- await data2.insert(machine);
- }
- // 打开其他页面
- await OpenOtherPage(machine, index, data3)
- }
- }
- } catch (error) {
- console.log('token监听错误', error);
- // 关闭浏览重来
- fs.appendFileSync('devicelog.txt', JSON.stringify(error) + os.EOL);
- await intBeaur()
- }
- }
- }
- // 定时请求设备状态
- async function getDeviceInfo(token) {
- TOKEN = token
- console.log('当前token', token);
- try {
- let datas = await mongo.collection('DeviceStatus') // 设备状态库
- let data1 = await mongo.collection('bauerAlarms') //设备报警库
- GetDeviceDb(TOKEN, datas, data1)
- timers = setInterval(async () => {
- await GetDeviceDb(TOKEN, datas, data1)
- }, 1000 * 60);
- } catch (error) {
- console.log('设备状态错误2', error);
- // 关闭浏览重来
- fs.appendFileSync('devicelog.txt', JSON.stringify(error) + os.EOL);
- await intBeaur()
- }
- }
- // 设备状态抓取方法
- async function GetDeviceDb(TOKEN, datas, data1) {
- try {
- // 获取设备状态
- const db = await axios({
- method: "GET",
- url: `https://api-webbgm.bauer.de/v1/equipment/dashboard-equipment-list?status_id=1`,
- headers: {
- 'Authorization': TOKEN
- }
- })
- const nowtime = Date.now()
- for (let k = 0; k < db.data.length; k++) {
- const el = db.data[k];
- const obj = {
- device_num: el.construction_number,
- status: el.status,
- time_minute: moment(nowtime).format('YYYY-MM-DD HH:mm'),
- time_day: moment(nowtime).format('YYYY-MM-DD'),
- time_day_long: moment(moment(nowtime).format('YYYY-MM-DD')).valueOf()
- }
- await datas.insert(obj)
- // 日志输出
- fs.appendFileSync('devicelog.txt', JSON.stringify(obj) + os.EOL);
- }
- // 获取设备报警
- const dblist = await axios({
- method: "GET",
- url: `https://api-webbgm.bauer.de/v1/message/message-list`,
- headers: {
- 'Authorization': TOKEN
- }
- })
- if (dblist.data && dblist.data.data.length) {
- console.log('有报警', dblist.data.data);
- for (let j = 0; j < dblist.data.data.length; j++) {
- const el = dblist.data.data[j];
- el.timstamp = parseInt(new Date(el.date).getTime() / 1000);
- await data1.insert(el);
- }
- } else {
- console.log('无报警', dblist.data.data);
- }
- console.log('抓取设备状态', moment(nowtime).format('YYYY-MM-DD HH:mm'));
- } catch (error) {
- // 关闭浏览重来
- console.log('设备状态错误3',error);
- }
- }
- // 新建页面登陆
- async function BauerLogin(username, password) {
- const page = await browser.newPage();
- // 登录直接进入监控的webbgm
- await page.goto('https://webbgm.bauer.de/login?lang=en', { timeout: 0 });
- // 输入账号密码
- await page.type('input[type="text"]', username, { delay: 100 });
- await page.type('input[type="password"]', password, { delay: 100 });
- await page.click('button[type="submit"]');
- // 等待登录完成
- await page.waitForNavigation({ timeout: 0 });
- return page
- }
- // 打开其他页面
- async function OpenOtherPage(machine, index, data3) {
- const newPage = await browser.newPage();
- await newPage.goto('https://webbgm.bauer.de/equipment/' + machine.number + '/b-tronic', { timeout: 0 })
- allpages = new DataListen(newPage, machine.construction_number, index, data3);
- }
- } catch (err) {
- console.log('程序错误', err);
- }
- })();
|