From f56b2e0444c2a6a6ffe4d16bb3765a0316b0638b Mon Sep 17 00:00:00 2001 From: zmzimpl Date: Sat, 9 Dec 2023 19:12:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=BF=90=E8=A1=8C=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logs/Api/2023-12-09.log | 0 logs/Main/2023-12-09.log | 6 + logs/Proxy/2023-12-09.log | 0 logs/Service/2023-12-09.log | 114 ++++++++++++++++++ logs/Window/2023-12-09.log | 1 + packages/main/src/fingerprint/index.ts | 22 +--- packages/main/src/index.ts | 1 - packages/main/src/services/commonService.ts | 45 ++++++- packages/preload/src/bridges/common.ts | 4 + .../src/components/addable-select/index.tsx | 2 +- .../src/components/navigation/index.tsx | 5 +- packages/renderer/src/i18n.ts | 16 +++ packages/renderer/src/index.css | 4 + packages/renderer/src/pages/logs/index.css | 4 + packages/renderer/src/pages/logs/index.tsx | 112 +++++++++++++++++ .../windows/components/edit-form/index.tsx | 5 +- .../windows/components/import-form/index.tsx | 16 ++- .../src/pages/windows/detail/index.tsx | 6 +- packages/renderer/src/routes/index.tsx | 7 ++ tailwind.config.js | 7 +- 20 files changed, 342 insertions(+), 35 deletions(-) create mode 100644 logs/Api/2023-12-09.log create mode 100644 logs/Main/2023-12-09.log create mode 100644 logs/Proxy/2023-12-09.log create mode 100644 logs/Service/2023-12-09.log create mode 100644 logs/Window/2023-12-09.log create mode 100644 packages/renderer/src/pages/logs/index.css create mode 100644 packages/renderer/src/pages/logs/index.tsx diff --git a/logs/Api/2023-12-09.log b/logs/Api/2023-12-09.log new file mode 100644 index 0000000..e69de29 diff --git a/logs/Main/2023-12-09.log b/logs/Main/2023-12-09.log new file mode 100644 index 0000000..2a50db5 --- /dev/null +++ b/logs/Main/2023-12-09.log @@ -0,0 +1,6 @@ +Main | 2023-12-09 16:35:27 - info: env, is prod:, false +Main | 2023-12-09 16:37:46 - info: env, is prod:, false +Main | 2023-12-09 16:48:49 - info: env, is prod:, false +Main | 2023-12-09 16:51:26 - info: env, is prod:, false +Main | 2023-12-09 16:52:42 - info: env, is prod:, false +Main | 2023-12-09 16:55:12 - info: env, is prod:, false diff --git a/logs/Proxy/2023-12-09.log b/logs/Proxy/2023-12-09.log new file mode 100644 index 0000000..e69de29 diff --git a/logs/Service/2023-12-09.log b/logs/Service/2023-12-09.log new file mode 100644 index 0000000..7535c6e --- /dev/null +++ b/logs/Service/2023-12-09.log @@ -0,0 +1,114 @@ +Service | 2023-12-09 16:35:27 - info: init common service... +Service | 2023-12-09 16:35:27 - info: init window service... +Service | 2023-12-09 16:35:27 - info: init group service... +Service | 2023-12-09 16:35:27 - info: init proxy bridge... +Service | 2023-12-09 16:35:27 - info: init tag service... +Service | 2023-12-09 16:35:27 - info: init sync service... +Service | 2023-12-09 16:37:46 - info: init common service... +Service | 2023-12-09 16:37:46 - info: init window service... +Service | 2023-12-09 16:37:46 - info: init group service... +Service | 2023-12-09 16:37:46 - info: init proxy bridge... +Service | 2023-12-09 16:37:46 - info: init tag service... +Service | 2023-12-09 16:37:46 - info: init sync service... +Service | 2023-12-09 16:48:49 - info: init common service... +Service | 2023-12-09 16:48:49 - info: init window service... +Service | 2023-12-09 16:48:49 - info: init group service... +Service | 2023-12-09 16:48:49 - info: init proxy bridge... +Service | 2023-12-09 16:48:49 - info: init tag service... +Service | 2023-12-09 16:48:49 - info: init sync service... +Service | 2023-12-09 16:51:26 - info: init common service... +Service | 2023-12-09 16:51:26 - info: init window service... +Service | 2023-12-09 16:51:26 - info: init group service... +Service | 2023-12-09 16:51:26 - info: init proxy bridge... +Service | 2023-12-09 16:51:26 - info: init tag service... +Service | 2023-12-09 16:51:26 - info: init sync service... +Service | 2023-12-09 16:52:42 - info: init common service... +Service | 2023-12-09 16:52:42 - info: init window service... +Service | 2023-12-09 16:52:42 - info: init group service... +Service | 2023-12-09 16:52:42 - info: init proxy bridge... +Service | 2023-12-09 16:52:42 - info: init tag service... +Service | 2023-12-09 16:52:42 - info: init sync service... +Service | 2023-12-09 16:55:12 - info: init common service... +Service | 2023-12-09 16:55:12 - info: init window service... +Service | 2023-12-09 16:55:12 - info: init group service... +Service | 2023-12-09 16:55:12 - info: init proxy bridge... +Service | 2023-12-09 16:55:12 - info: init tag service... +Service | 2023-12-09 16:55:12 - info: init sync service... +Service | 2023-12-09 16:55:34 - info: init common service... +Service | 2023-12-09 16:55:34 - info: init window service... +Service | 2023-12-09 16:55:34 - info: init group service... +Service | 2023-12-09 16:55:34 - info: init proxy bridge... +Service | 2023-12-09 16:55:34 - info: init tag service... +Service | 2023-12-09 16:55:34 - info: init sync service... +Service | 2023-12-09 16:56:21 - info: init common service... +Service | 2023-12-09 16:56:21 - info: init window service... +Service | 2023-12-09 16:56:21 - info: init group service... +Service | 2023-12-09 16:56:21 - info: init proxy bridge... +Service | 2023-12-09 16:56:21 - info: init tag service... +Service | 2023-12-09 16:56:21 - info: init sync service... +Service | 2023-12-09 17:55:14 - info: init common service... +Service | 2023-12-09 17:55:14 - info: init window service... +Service | 2023-12-09 17:55:14 - info: init group service... +Service | 2023-12-09 17:55:14 - info: init proxy bridge... +Service | 2023-12-09 17:55:14 - info: init tag service... +Service | 2023-12-09 17:55:14 - info: init sync service... +Service | 2023-12-09 18:03:54 - info: init common service... +Service | 2023-12-09 18:03:54 - info: init window service... +Service | 2023-12-09 18:03:54 - info: init group service... +Service | 2023-12-09 18:03:54 - info: init proxy bridge... +Service | 2023-12-09 18:03:54 - info: init tag service... +Service | 2023-12-09 18:03:54 - info: init sync service... +Service | 2023-12-09 18:04:10 - info: init common service... +Service | 2023-12-09 18:04:10 - info: init window service... +Service | 2023-12-09 18:04:10 - info: init group service... +Service | 2023-12-09 18:04:10 - info: init proxy bridge... +Service | 2023-12-09 18:04:10 - info: init tag service... +Service | 2023-12-09 18:04:10 - info: init sync service... +Service | 2023-12-09 18:04:17 - info: init common service... +Service | 2023-12-09 18:04:17 - info: init window service... +Service | 2023-12-09 18:04:17 - info: init group service... +Service | 2023-12-09 18:04:17 - info: init proxy bridge... +Service | 2023-12-09 18:04:17 - info: init tag service... +Service | 2023-12-09 18:04:17 - info: init sync service... +Service | 2023-12-09 18:24:52 - info: init common service... +Service | 2023-12-09 18:24:52 - info: init window service... +Service | 2023-12-09 18:24:52 - info: init group service... +Service | 2023-12-09 18:24:52 - info: init proxy bridge... +Service | 2023-12-09 18:24:52 - info: init tag service... +Service | 2023-12-09 18:24:52 - info: init sync service... +Service | 2023-12-09 18:45:35 - info: init common service... +Service | 2023-12-09 18:45:35 - info: init window service... +Service | 2023-12-09 18:45:35 - info: init group service... +Service | 2023-12-09 18:45:35 - info: init proxy bridge... +Service | 2023-12-09 18:45:35 - info: init tag service... +Service | 2023-12-09 18:45:35 - info: init sync service... +Service | 2023-12-09 18:45:39 - info: init common service... +Service | 2023-12-09 18:45:39 - info: init window service... +Service | 2023-12-09 18:45:39 - info: init group service... +Service | 2023-12-09 18:45:39 - info: init proxy bridge... +Service | 2023-12-09 18:45:39 - info: init tag service... +Service | 2023-12-09 18:45:39 - info: init sync service... +Service | 2023-12-09 18:54:10 - info: init common service... +Service | 2023-12-09 18:54:10 - info: init window service... +Service | 2023-12-09 18:54:10 - info: init group service... +Service | 2023-12-09 18:54:10 - info: init proxy bridge... +Service | 2023-12-09 18:54:10 - info: init tag service... +Service | 2023-12-09 18:54:10 - info: init sync service... +Service | 2023-12-09 19:10:42 - info: init common service... +Service | 2023-12-09 19:10:42 - info: init window service... +Service | 2023-12-09 19:10:42 - info: init group service... +Service | 2023-12-09 19:10:42 - info: init proxy bridge... +Service | 2023-12-09 19:10:42 - info: init tag service... +Service | 2023-12-09 19:10:42 - info: init sync service... +Service | 2023-12-09 19:11:25 - info: init common service... +Service | 2023-12-09 19:11:25 - info: init window service... +Service | 2023-12-09 19:11:25 - info: init group service... +Service | 2023-12-09 19:11:25 - info: init proxy bridge... +Service | 2023-12-09 19:11:25 - info: init tag service... +Service | 2023-12-09 19:11:25 - info: init sync service... +Service | 2023-12-09 19:11:27 - info: init common service... +Service | 2023-12-09 19:11:27 - info: init window service... +Service | 2023-12-09 19:11:27 - info: init group service... +Service | 2023-12-09 19:11:27 - info: init proxy bridge... +Service | 2023-12-09 19:11:27 - info: init tag service... +Service | 2023-12-09 19:11:27 - info: init sync service... diff --git a/logs/Window/2023-12-09.log b/logs/Window/2023-12-09.log new file mode 100644 index 0000000..b87bcd2 --- /dev/null +++ b/logs/Window/2023-12-09.log @@ -0,0 +1 @@ +Window | 2023-12-09 16:55:59 - info: fingerprint 182 "j4gapbh" {"ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.123 Safari/537.36","platform":"Win32","pathStr":"o","webgl":0.12400250746218877,"audio":93} diff --git a/packages/main/src/fingerprint/index.ts b/packages/main/src/fingerprint/index.ts index 17017b7..f62a769 100644 --- a/packages/main/src/fingerprint/index.ts +++ b/packages/main/src/fingerprint/index.ts @@ -27,17 +27,6 @@ const HOST = '127.0.0.1'; // const HomePath = app.getPath('userData'); // console.log(HomePath); -const getPublicIP = async () => { - try { - const response = await fetch('https://api.ipify.org?format=json'); - const data = await response.json(); - return data.ip; - } catch (error) { - logger.error('Error fetching public IP:', error); - return null; - } -}; - const attachFingerprintToPuppeteer = async (page: Page, ipInfo: IP) => { page.on('framenavigated', async _msg => { try { @@ -120,22 +109,24 @@ export async function openFingerprintWindow(id: number) { } const win = BrowserWindow.getAllWindows()[0]; const windowDataDir = `${cachePath}\\${id}_${windowData.profile_id}`; - const chromePath = 'D:\\chromium-dev\\source\\src\\out\\Default\\chrome.exe'; let ipInfo = {timeZone: '', ip: '', ll: [], country: ''}; if (windowData.proxy_id && proxyData.ip) { ipInfo = await getProxyInfo(proxyData.ip, proxyData.ip_checker || 'ip2location'); } else { - const localIp = await getPublicIP(); - ipInfo = await getProxyInfo(localIp, 'ip2location'); + let localIP = ''; + if (import.meta.env.DEV) { + const {data} = await api.get('https://api64.ipify.org?format=json'); + localIP = data.ip; + } + ipInfo = await getProxyInfo(localIP, 'ip2location'); } if (!ipInfo?.ip) { logger.error('ipInfo is empty'); return; } const fingerprint = await fetchWindowFingerprint(id, windowData.profile_id); - logger.info('fingerprint', id, windowData.profile_id, fingerprint); if (chromePath) { const chromePort = await portscanner.findAPortNotInUse(9222, 10222); let finalProxy; @@ -149,7 +140,6 @@ export async function openFingerprintWindow(id: number) { finalProxy = proxyInstance.proxyUrl; proxyServer = proxyInstance.proxyServer; } - console.log(JSON.stringify(fingerprint)); const launchParamter = [ `--extended-parameters=${btoa(JSON.stringify(fingerprint))}`, '--force-color-profile=srgb', diff --git a/packages/main/src/index.ts b/packages/main/src/index.ts index e521fa7..d82ca24 100644 --- a/packages/main/src/index.ts +++ b/packages/main/src/index.ts @@ -93,7 +93,6 @@ app * if you compile production app without publishing it to distribution server. * Like `npm run compile` does. It's ok 😅 */ -logger.info(`env, is prod:, ${import.meta.env.PROD ? 'true' : 'false'}`); if (import.meta.env.PROD) { app .whenReady() diff --git a/packages/main/src/services/commonService.ts b/packages/main/src/services/commonService.ts index f338370..716c56b 100644 --- a/packages/main/src/services/commonService.ts +++ b/packages/main/src/services/commonService.ts @@ -3,7 +3,7 @@ import {createLogger} from '../../../shared/utils/logger'; import {dataStore} from '../../../shared/utils/dataStore'; import {SERVICE_LOGGER_LABEL} from '../constants'; import {join} from 'path'; -import {copyFileSync, writeFileSync} from 'fs'; +import {copyFileSync, writeFileSync, readFileSync, readdir} from 'fs'; import type {DataStore, SettingOptions} from '../../../shared/types/common'; import {getSettings} from '../utils/get-settings'; @@ -39,6 +39,47 @@ export const initCommonService = () => { return settings; }); + ipcMain.handle( + 'common-fetch-logs', + async (_, module: 'Main' | 'Windows' | 'Proxy' | 'Services' | 'Api' = 'Main') => { + // read directory and get all folders + // read directory and get all files + const logFiles = await new Promise((resolve, reject) => { + readdir(`logs/${module}`, (err, files) => { + if (err) { + reject(err); + } else { + resolve(files); + } + }); + }); + // read latest 10 files content + return logFiles.slice(-10).map(file => { + const logFile = `logs/${module}/${file}`; + const content = readFileSync(logFile, 'utf8'); + const formatContent = content + .split('\n') + .map(line => { + const regex = /-\s*(info|warn|error):/; + let logLevel = 'info'; + const match = line.match(regex); + if (match) { + logLevel = match[1]; + } + return { + message: line, + level: logLevel, + }; + }) + .filter(line => line.message); + return { + name: file, + content: formatContent, + }; + }); + }, + ); + ipcMain.handle('common-save-settings', async (_, values: SettingOptions) => { const userDataPath = app.getPath('userData'); const configFilePath = join(userDataPath, 'chrome-power-config.json'); @@ -50,8 +91,6 @@ export const initCommonService = () => { } return {}; - - return {}; }); ipcMain.handle('common-choose-path', async () => { diff --git a/packages/preload/src/bridges/common.ts b/packages/preload/src/bridges/common.ts index 07c04b5..e50d216 100644 --- a/packages/preload/src/bridges/common.ts +++ b/packages/preload/src/bridges/common.ts @@ -22,4 +22,8 @@ export const CommonBridge = { const result = await ipcRenderer.invoke('common-save-settings', settings); return result; }, + async getLogs(logModule: 'Main' | 'Windows' | 'Proxy' | 'Services' | 'Api') { + const result = await ipcRenderer.invoke('common-fetch-logs', logModule); + return result; + }, }; diff --git a/packages/renderer/src/components/addable-select/index.tsx b/packages/renderer/src/components/addable-select/index.tsx index 39fa3cb..636bc7d 100644 --- a/packages/renderer/src/components/addable-select/index.tsx +++ b/packages/renderer/src/components/addable-select/index.tsx @@ -83,7 +83,7 @@ const AddableSelect: React.FC = ({ value={value} filterOption={filterOption} tagRender={tagRender} - placeholder={placeholder || 'Please select'} + placeholder={placeholder || ''} // labelInValue={true} onChange={onChange} tokenSeparators={[',']} diff --git a/packages/renderer/src/components/navigation/index.tsx b/packages/renderer/src/components/navigation/index.tsx index 8b7c1eb..ba51c23 100644 --- a/packages/renderer/src/components/navigation/index.tsx +++ b/packages/renderer/src/components/navigation/index.tsx @@ -7,7 +7,6 @@ import type {RootState} from '/@/store'; import {useSelector} from 'react-redux'; import {useEffect} from 'react'; import './index.css'; -import Link from 'antd/es/typography/Link'; import React from 'react'; import { t } from 'i18next'; @@ -96,12 +95,12 @@ export default function Navigation() { className="text-right " span={9} > - {formattedMembership.expiredAt ? t('membership_renew') : t('membership_upgrade')} - + diff --git a/packages/renderer/src/i18n.ts b/packages/renderer/src/i18n.ts index fdea32e..ed6e3dd 100644 --- a/packages/renderer/src/i18n.ts +++ b/packages/renderer/src/i18n.ts @@ -46,6 +46,13 @@ i18n window_edit_form_group: 'Group', window_edit_form_proxy: 'Proxy', window_edit_form_tags: 'Tags', + window_detail_create: 'Create', + window_detail_import: 'Import', + window_import_from_template: 'Import from template', + window_import_from_template_tip: 'Click to upload(Excel)', + window_import_from_template_download: 'Download template', + window_import_from_ads: 'Import AdsPower file', + window_import_from_ads_tip: 'Click to upload(Txt/Excel)', proxy_check: 'Check', proxy_new_proxy: 'New proxy', @@ -90,6 +97,7 @@ i18n menu_windows: 'Windows', menu_proxy: 'Proxy', menu_settings: 'Settings', + menu_logs: 'Running Logs', menu_sync: 'Sync', membership_renew: 'Renew', @@ -140,6 +148,13 @@ i18n window_edit_form_group: '分组', window_edit_form_proxy: '代理', window_edit_form_tags: '标签', + window_detail_create: '创建', + window_detail_import: '导入', + window_import_from_template: '从模板导入', + window_import_from_template_tip: '点击上传(Excel)', + window_import_from_template_download: '下载模板', + window_import_from_ads: '导入 AdsPower 文件', + window_import_from_ads_tip: '点击上传(Txt/Excel)', proxy_check: '检查', proxy_new_proxy: '新建代理', @@ -183,6 +198,7 @@ i18n menu_windows: '窗口管理', menu_proxy: '代理设置', menu_sync: '同步操作', + menu_logs: '运行日志', menu_settings: '设置', membership_renew: '续期', diff --git a/packages/renderer/src/index.css b/packages/renderer/src/index.css index 3b6a575..7db244f 100644 --- a/packages/renderer/src/index.css +++ b/packages/renderer/src/index.css @@ -111,6 +111,10 @@ body { z-index: 1; } +.h-full { + height: 100% !important; +} + /* 在CSS中 */ .draggable { -webkit-app-region: drag; diff --git a/packages/renderer/src/pages/logs/index.css b/packages/renderer/src/pages/logs/index.css new file mode 100644 index 0000000..2a57f24 --- /dev/null +++ b/packages/renderer/src/pages/logs/index.css @@ -0,0 +1,4 @@ +.log-container { + height: calc(100% - 64px); + overflow: auto; +} \ No newline at end of file diff --git a/packages/renderer/src/pages/logs/index.tsx b/packages/renderer/src/pages/logs/index.tsx new file mode 100644 index 0000000..2f075c1 --- /dev/null +++ b/packages/renderer/src/pages/logs/index.tsx @@ -0,0 +1,112 @@ +import {Card, Tabs} from 'antd'; +import {CommonBridge} from '#preload'; +import {useEffect} from 'react'; +import React from 'react'; +import './index.css'; + +interface logsDataOptions { + name: string; + content: Array<{ + level: string; + message: string; + }>; +} + +const Logs = () => { + const items = [ + { + key: 'Main', + label: 'Main', + }, + { + key: 'Window', + label: 'Windows', + }, + { + key: 'Proxy', + label: 'Proxy', + }, + { + key: 'Api', + label: 'Sync', + }, + { + key: 'Service', + label: 'Service', + }, + ]; + const [logsData, setLogsData] = React.useState([]); + + const fetchLogs = async (logModule: 'Main' | 'Windows' | 'Proxy' | 'Services' | 'Api') => { + const logs = await CommonBridge.getLogs(logModule); + setLogsData(logs); + }; + + useEffect(() => { + fetchLogs('Main'); + }, []); + // type FieldType = SettingOptions; + + return ( + <> + + + fetchLogs(key as 'Main' | 'Windows' | 'Proxy' | 'Services' | 'Api') + } + size="small" + items={items} + /> + + + + ); +}; +export default Logs; diff --git a/packages/renderer/src/pages/windows/components/edit-form/index.tsx b/packages/renderer/src/pages/windows/components/edit-form/index.tsx index 9486d99..1ad5e17 100644 --- a/packages/renderer/src/pages/windows/components/edit-form/index.tsx +++ b/packages/renderer/src/pages/windows/components/edit-form/index.tsx @@ -39,7 +39,6 @@ const WindowEditForm = ({ }; const fetchProxies = async () => { const proxies = await ProxyBridge?.getAll(); - proxies.splice(0, 0, {id: undefined, ip: 'No Proxy'}); setProxies(proxies); }; @@ -91,7 +90,7 @@ const WindowEditForm = ({ label={t('window_edit_form_name')} name="name" > - + @@ -152,8 +151,8 @@ const WindowEditForm = ({ label={t('window_edit_form_proxy')} >