ngoctuanai commited on
Commit
45030dc
1 Parent(s): 1216dc3

Upload 6 files

Browse files
Files changed (6) hide show
  1. .env +1 -0
  2. LICENSE +21 -0
  3. README-EN.md +50 -0
  4. README-VN.md +49 -0
  5. index.js +91 -0
  6. package.json +35 -0
.env ADDED
@@ -0,0 +1 @@
 
 
1
+ Timezone=Asia/Ho_Chi_Minh
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2024 ngoctuanai
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
README-EN.md ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div align="center">
2
+ <a name="readme-top"></a>
3
+
4
+ # Keep Online
5
+
6
+ **English** · [Vietnamese](./README-VN.md)
7
+
8
+ ### Deploying with Replit
9
+
10
+ | Deploy with Replit |
11
+ | :-------------------------------------: |
12
+ | [![][deploy-button-image]][deploy-link] |
13
+
14
+ <div align="center">
15
+ This script is built on a Node.js environment, performing periodic access to websites, including both continuous and intermittent access, to ensure the container remains active.
16
+ </div>
17
+
18
+ <div align="left">
19
+
20
+ ## Usage Instructions
21
+
22
+ > # NOTE
23
+ > Set the time zone <a href="/.env">Env.Example</a>
24
+
25
+ --------------
26
+
27
+ 1. Run on a container or VPS with a Node.js environment (Node.js environment needs to be installed manually).
28
+ 2. Upload the `index.js` and `package.json` files to the root directory of the running environment.
29
+ 3. URL for continuous access 24 hours
30
+
31
+ - In index.js, from line 10 to 14, the URLs are defined in the urls array, used for continuous access throughout 24 hours. You can add more URLs to this array without any limit on the number. Each URL will be accessed in cycles, with a default of 2 minutes (120 seconds), but you can adjust this cycle according to your needs by changing the parameter in the setInterval function on line 42.
32
+
33
+ 4. URLs pause access from 00:00 to 06:00
34
+
35
+ - In index.js, from line 23 to 26, the URLs are defined in the websites array, used for scheduled access. These URLs will pause access from 00:00 to 06:00. During this time, the application will not make any requests to the URLs in the websites array. At other times of the day, these URLs will be accessed normally. The access cycle for these URLs is also 2 minutes (120 seconds), and you can adjust it according to your needs by changing the parameter in the setInterval function on line 36.
36
+
37
+ ## Application Platform
38
+
39
+ - Supports unlimited Node.js deployment. Does not support physical containers that are inactive.
40
+
41
+
42
+ ## LICENSE
43
+
44
+ MIT © [LICENSE](./LICENSE).
45
+
46
+ </div>
47
+
48
+ <!-- LINK -->
49
+ [deploy-button-image]: https://img.shields.io/badge/Run_on_Repl.it-grey?logo=replit&size=large
50
+ [deploy-link]: https://replit.com/login?source=%2Fgithub%2F*&goto=%2Fnew%2F%3FgithubRepo%3Dchokiproai%2Fkeep-online
README-VN.md ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div align="center">
2
+ <a name="readme-top"></a>
3
+
4
+ # Keep online
5
+
6
+ **Vietnamese** · [English](./README.md)
7
+
8
+ ### Deploying with Replit
9
+
10
+ | Deploy with Replit |
11
+ | :-------------------------------------: |
12
+ | [![][deploy-button-image]][deploy-link] |
13
+
14
+ <div align="center">
15
+ Script này được xây dựng trên môi trường Node.js, thực hiện truy cập định kỳ vào các trang web, bao gồm cả chế độ truy cập liên tục và gián đoạn, nhằm đảm bảo container luôn hoạt động.
16
+ </div>
17
+
18
+ <div align="left">
19
+
20
+ ## Hướng dẫn sử dụng
21
+
22
+ > # NOTE
23
+ > Thiết lập múi giờ <a href="/.env">Env.Example</a>
24
+
25
+ --------------
26
+
27
+ 1. Chạy trên container hoặc VPS có môi trường Node.js (cần tự cài đặt môi trường Node.js).
28
+ 2. Tải lên các tệp `index.js` và `package.json` vào thư mục gốc của môi trường chạy.
29
+ 3. URL để truy cập liên tục 24 giờ
30
+
31
+ - Trong index.js, từ dòng 10 đến 14 là các URL được định nghĩa trong mảng urls, dùng để truy cập liên tục trong suốt 24 giờ. Bạn có thể thêm nhiều URL khác vào mảng này mà không bị giới hạn số lượng. Mỗi URL sẽ được truy cập theo chu kỳ, mặc định là 2 phút (120 giây), nhưng bạn có thể điều chỉnh chu kỳ này theo nhu cầu của mình bằng cách thay đổi tham số trong hàm setInterval ở dòng 42.
32
+
33
+ 4. URL tạm dừng truy cập từ 00:00 đến 06:00
34
+
35
+ - Trong index.js, từ dòng 23 đến 26 là các URL được định nghĩa trong mảng websites, dùng để truy cập theo lịch trình. Các URL này sẽ tạm dừng truy cập từ 00:00 đến 06:00. Trong khoảng thời gian này, ứng dụng sẽ không thực hiện bất kỳ yêu cầu nào đến các URL trong mảng websites. Các thời gian khác trong ngày, các URL này sẽ được truy cập bình thường. Chu kỳ truy cập cho các URL này cũng là 2 phút (120 giây), và bạn có thể điều chỉnh theo nhu cầu của mình bằng cách thay đổi tham số trong hàm setInterval ở dòng 36.
36
+
37
+ ## Nền tảng áp dụng
38
+
39
+ - Hỗ trợ không giới hạn triển khai node.js. Không hỗ trợ các container ngừng hoạt động vật lý.
40
+
41
+ ## LICENSE
42
+
43
+ MIT © [LICENSE](./LICENSE).
44
+
45
+ </div>
46
+
47
+ <!-- LINK -->
48
+ [deploy-button-image]: https://img.shields.io/badge/Run_on_Repl.it-grey?logo=replit&size=large
49
+ [deploy-link]: https://replit.com/login?source=%2Fgithub%2F*&goto=%2Fnew%2F%3FgithubRepo%3Dchokiproai%2Fkeep-online
index.js ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const axios = require('axios');
2
+ const http = require('http');
3
+ const cron = require('node-cron');
4
+ const moment = require('moment-timezone');
5
+ require('dotenv').config(); // Load environment variables from .env file
6
+
7
+ const port = process.env.PORT || 7860;
8
+ const timezone = process.env.Timezone // Default to Asia/Ho_Chi_Minh if not set
9
+
10
+ // Array of URLs for 24-hour access
11
+ const urls = [
12
+ 'https://www.google.com',
13
+ // Add more URLs for continuous 24-hour access
14
+ ];
15
+
16
+ // Array of URLs for scheduled access
17
+ const websites = [
18
+ 'https://www.google.com',
19
+ // Add more URLs for scheduled access
20
+ ];
21
+
22
+ // Function to visit websites
23
+ const visitWebsites = async () => {
24
+ for (const url of websites) {
25
+ try {
26
+ const response = await axios.get(url);
27
+ console.log(`${moment().tz(timezone).format('YYYY-MM-DD HH:mm:ss')} Successfully visited: ${url} - Status code: ${response.status}`);
28
+ } catch (error) {
29
+ console.error(`Error visiting ${url}: ${error.message}`);
30
+ }
31
+ }
32
+ };
33
+
34
+ // Check and set timer
35
+ const checkAndSetTimer = () => {
36
+ const currentMoment = moment().tz(timezone);
37
+ if (currentMoment.hours() >= 0 && currentMoment.hours() < 6) {
38
+ console.log(`Stopping access from 00:00 to 06:00 --- ${currentMoment.format('YYYY-MM-DD HH:mm:ss')}`);
39
+ clearInterval(visitIntervalId);
40
+ const nextVisitTime = currentMoment.clone().hours(6).minutes(0).seconds(0);
41
+ const nextVisitInterval = nextVisitTime.diff(currentMoment);
42
+ setTimeout(startVisits, nextVisitInterval);
43
+ } else {
44
+ startVisits();
45
+ }
46
+ };
47
+
48
+ let visitIntervalId;
49
+ const startVisits = () => {
50
+ clearInterval(visitIntervalId);
51
+ visitIntervalId = setInterval(visitWebsites, 2 * 60 * 1000); // Perform access every 2 minutes
52
+ };
53
+
54
+ const runScript = () => {
55
+ setInterval(checkAndSetTimer, 2 * 60 * 1000); // Check every 2 minutes
56
+ };
57
+
58
+ // Continuous 24-hour access
59
+ const scrapeAndLog = async (url) => {
60
+ try {
61
+ const response = await axios.get(url);
62
+ console.log(`${moment().tz(timezone).format('YYYY-MM-DD HH:mm:ss')} Successfully visited: ${url} - Status code: ${response.status}`);
63
+ } catch (error) {
64
+ console.error(`${moment().tz(timezone).format('YYYY-MM-DD HH:mm:ss')}: Error visiting web: ${url}: ${error.message}`);
65
+ }
66
+ };
67
+
68
+ // Access every 2 minutes
69
+ cron.schedule('*/2 * * * *', () => {
70
+ console.log('Performing website access...');
71
+ urls.forEach(scrapeAndLog);
72
+ });
73
+
74
+ // Create HTTP service
75
+ const server = http.createServer((req, res) => {
76
+ if (req.url === '/') {
77
+ res.writeHead(200, { 'Content-Type': 'text/plain' });
78
+ res.end('Hello, World!\n');
79
+ } else {
80
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
81
+ res.end('Not Found\n');
82
+ }
83
+ });
84
+
85
+ server.listen(port, () => {
86
+ console.log(`Server is running on port: ${port}`);
87
+ });
88
+
89
+ // Start the script
90
+ checkAndSetTimer();
91
+ runScript();
package.json ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "keep-online",
3
+ "version": "1.0.0",
4
+ "description": "Automatically keep your services online.",
5
+ "main": "index.js",
6
+ "author": "chokiproai",
7
+ "license": "MIT",
8
+ "private": false,
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/chokiproai/keep-online.git"
12
+ },
13
+ "scripts": {
14
+ "start": "node index.js"
15
+ },
16
+ "dependencies": {
17
+ "axios": "^1.6.2",
18
+ "node-cron": "^2.0.1",
19
+ "moment-timezone": "^0.5.34",
20
+ "dotenv": "^10.0.0"
21
+ },
22
+ "engines": {
23
+ "node": ">=14"
24
+ },
25
+ "keywords": [
26
+ "keep online",
27
+ "auto",
28
+ "monitor",
29
+ "service"
30
+ ],
31
+ "homepage": "https://github.com/chokiproai/keep-online#readme",
32
+ "bugs": {
33
+ "url": "https://github.com/chokiproai/keep-online/issues"
34
+ }
35
+ }