├── .env ├── LICENSE ├── README.md ├── node_modules.zip ├── package-lock.json ├── package.json └── tracker.js /.env: -------------------------------------------------------------------------------- 1 | ADM= 2 | MONGO= 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Tuna Terps 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. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DayZ-Player-Tracker 2 |
3 | **Please check latest branch for all recent additions**
4 |
5 | Welcome to the DayZ Player Tracker !
6 | This is designed to read serverlogs and save players to a database;
7 | This script was desgined and implemented by Tuna Terps with K1ngs of DayZ and I hope you enjoy !
8 |
9 | ** TO GET STARTED ** 10 |
11 | 1.) Download the necessary files and extract the node_modules .zip folder
12 | 2.) Structure your project - place files in a folder and create a subfolder "logs"
13 | 3.) Go to your nitrado account and create a long-life token; Acquire gameserver ID & hostname for intended server
14 | 4.) Replace placeholder values in tracker.js on lines 23 & 33 , as well as in your .env file !
15 | 5.) Utilize VSC virtual terminal to run `npm tracker.js`
16 | 6.) tracker collects logs on hourly basis; enjoy!
17 | 18 | *Contributions are welcome*
19 | For any major changes; please open a pull request and be sure to frequently test updates.
20 |
21 | Thanks again ! 22 | -------------------------------------------------------------------------------- /node_modules.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tuna-Terps/DayZ-Player-Tracker/30ba10a7cfe91bec1d715751dc594969ea609131/node_modules.zip -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tracker", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "axios": { 8 | "version": "0.20.0", 9 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz", 10 | "integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==", 11 | "requires": { 12 | "follow-redirects": "^1.10.0" 13 | } 14 | }, 15 | "bl": { 16 | "version": "2.2.1", 17 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", 18 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", 19 | "requires": { 20 | "readable-stream": "^2.3.5", 21 | "safe-buffer": "^5.1.1" 22 | } 23 | }, 24 | "bluebird": { 25 | "version": "3.5.1", 26 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 27 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 28 | }, 29 | "bson": { 30 | "version": "1.1.5", 31 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", 32 | "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" 33 | }, 34 | "core-util-is": { 35 | "version": "1.0.2", 36 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 37 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 38 | }, 39 | "debug": { 40 | "version": "3.1.0", 41 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 42 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 43 | "requires": { 44 | "ms": "2.0.0" 45 | }, 46 | "dependencies": { 47 | "ms": { 48 | "version": "2.0.0", 49 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 50 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 51 | } 52 | } 53 | }, 54 | "denque": { 55 | "version": "1.4.1", 56 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", 57 | "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" 58 | }, 59 | "dotenv": { 60 | "version": "8.2.0", 61 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", 62 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" 63 | }, 64 | "follow-redirects": { 65 | "version": "1.13.0", 66 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", 67 | "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" 68 | }, 69 | "fs": { 70 | "version": "0.0.1-security", 71 | "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", 72 | "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" 73 | }, 74 | "inherits": { 75 | "version": "2.0.4", 76 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 77 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 78 | }, 79 | "isarray": { 80 | "version": "1.0.0", 81 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 82 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 83 | }, 84 | "kareem": { 85 | "version": "2.3.1", 86 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", 87 | "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" 88 | }, 89 | "memory-pager": { 90 | "version": "1.5.0", 91 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 92 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 93 | "optional": true 94 | }, 95 | "mongodb": { 96 | "version": "3.6.2", 97 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.2.tgz", 98 | "integrity": "sha512-sSZOb04w3HcnrrXC82NEh/YGCmBuRgR+C1hZgmmv4L6dBz4BkRse6Y8/q/neXer9i95fKUBbFi4KgeceXmbsOA==", 99 | "requires": { 100 | "bl": "^2.2.1", 101 | "bson": "^1.1.4", 102 | "denque": "^1.4.1", 103 | "require_optional": "^1.0.1", 104 | "safe-buffer": "^5.1.2", 105 | "saslprep": "^1.0.0" 106 | } 107 | }, 108 | "mongoose": { 109 | "version": "5.10.6", 110 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.10.6.tgz", 111 | "integrity": "sha512-p32oja2ydzFMS0K4P7G408Kagju6Qz/LmiAFAcP6BqnIi1McLTd6VZ3+ZQtQmaHM7w8iNupLLambCrsPKNJpYw==", 112 | "requires": { 113 | "bson": "^1.1.4", 114 | "kareem": "2.3.1", 115 | "mongodb": "3.6.2", 116 | "mongoose-legacy-pluralize": "1.0.2", 117 | "mpath": "0.7.0", 118 | "mquery": "3.2.2", 119 | "ms": "2.1.2", 120 | "regexp-clone": "1.0.0", 121 | "safe-buffer": "5.2.1", 122 | "sift": "7.0.1", 123 | "sliced": "1.0.1" 124 | } 125 | }, 126 | "mongoose-legacy-pluralize": { 127 | "version": "1.0.2", 128 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", 129 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" 130 | }, 131 | "mpath": { 132 | "version": "0.7.0", 133 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.7.0.tgz", 134 | "integrity": "sha512-Aiq04hILxhz1L+f7sjGyn7IxYzWm1zLNNXcfhDtx04kZ2Gk7uvFdgZ8ts1cWa/6d0TQmag2yR8zSGZUmp0tFNg==" 135 | }, 136 | "mquery": { 137 | "version": "3.2.2", 138 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz", 139 | "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==", 140 | "requires": { 141 | "bluebird": "3.5.1", 142 | "debug": "3.1.0", 143 | "regexp-clone": "^1.0.0", 144 | "safe-buffer": "5.1.2", 145 | "sliced": "1.0.1" 146 | }, 147 | "dependencies": { 148 | "safe-buffer": { 149 | "version": "5.1.2", 150 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 151 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 152 | } 153 | } 154 | }, 155 | "ms": { 156 | "version": "2.1.2", 157 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 158 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 159 | }, 160 | "path": { 161 | "version": "0.12.7", 162 | "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", 163 | "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", 164 | "requires": { 165 | "process": "^0.11.1", 166 | "util": "^0.10.3" 167 | } 168 | }, 169 | "process": { 170 | "version": "0.11.10", 171 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 172 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" 173 | }, 174 | "process-nextick-args": { 175 | "version": "2.0.1", 176 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 177 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 178 | }, 179 | "readable-stream": { 180 | "version": "2.3.7", 181 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 182 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 183 | "requires": { 184 | "core-util-is": "~1.0.0", 185 | "inherits": "~2.0.3", 186 | "isarray": "~1.0.0", 187 | "process-nextick-args": "~2.0.0", 188 | "safe-buffer": "~5.1.1", 189 | "string_decoder": "~1.1.1", 190 | "util-deprecate": "~1.0.1" 191 | }, 192 | "dependencies": { 193 | "safe-buffer": { 194 | "version": "5.1.2", 195 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 196 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 197 | } 198 | } 199 | }, 200 | "readline": { 201 | "version": "1.3.0", 202 | "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", 203 | "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=" 204 | }, 205 | "regexp-clone": { 206 | "version": "1.0.0", 207 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", 208 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" 209 | }, 210 | "require_optional": { 211 | "version": "1.0.1", 212 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", 213 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", 214 | "requires": { 215 | "resolve-from": "^2.0.0", 216 | "semver": "^5.1.0" 217 | } 218 | }, 219 | "resolve-from": { 220 | "version": "2.0.0", 221 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", 222 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" 223 | }, 224 | "safe-buffer": { 225 | "version": "5.2.1", 226 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 227 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 228 | }, 229 | "saslprep": { 230 | "version": "1.0.3", 231 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 232 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 233 | "optional": true, 234 | "requires": { 235 | "sparse-bitfield": "^3.0.3" 236 | } 237 | }, 238 | "semver": { 239 | "version": "5.7.1", 240 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 241 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 242 | }, 243 | "sift": { 244 | "version": "7.0.1", 245 | "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", 246 | "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" 247 | }, 248 | "sliced": { 249 | "version": "1.0.1", 250 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 251 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 252 | }, 253 | "sparse-bitfield": { 254 | "version": "3.0.3", 255 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 256 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 257 | "optional": true, 258 | "requires": { 259 | "memory-pager": "^1.0.2" 260 | } 261 | }, 262 | "string_decoder": { 263 | "version": "1.1.1", 264 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 265 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 266 | "requires": { 267 | "safe-buffer": "~5.1.0" 268 | }, 269 | "dependencies": { 270 | "safe-buffer": { 271 | "version": "5.1.2", 272 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 273 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 274 | } 275 | } 276 | }, 277 | "util": { 278 | "version": "0.10.4", 279 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", 280 | "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", 281 | "requires": { 282 | "inherits": "2.0.3" 283 | }, 284 | "dependencies": { 285 | "inherits": { 286 | "version": "2.0.3", 287 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 288 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 289 | } 290 | } 291 | }, 292 | "util-deprecate": { 293 | "version": "1.0.2", 294 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 295 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 296 | } 297 | } 298 | } 299 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tracker", 3 | "version": "1.0.0", 4 | "description": "Tutorial tracker", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.20.0", 13 | "dotenv": "^8.2.0", 14 | "fs": "0.0.1-security", 15 | "mongoose": "^5.10.6", 16 | "path": "^0.12.7", 17 | "readline": "^1.3.0" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tracker.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const readline = require('readline'); 3 | const mongoose = require('mongoose'); 4 | const {config} = require('dotenv'); 5 | const axios = require('axios'); 6 | const path = require('path'); 7 | const db = mongoose.connection; 8 | 9 | /* commented */ 10 | 11 | setInterval(function(){ 12 | 13 | config({ 14 | path: __dirname + '/.env/' 15 | }) 16 | 17 | async function downloadFile () { 18 | // This will request file that will contain download link for log 19 | console.log('{beginning GET request !}'); 20 | const url1 = 'https://api.nitrado.net/services/' 21 | const url2 = '/gameservers/file_server/download?file=/games/' 22 | const url3 = '/noftp/dayzxb/config/DayZServer_X1_x64.ADM' 23 | const filePath = path.resolve('./logs', 'serverlog.ADM') 24 | const writer = fs.createWriteStream(filePath) 25 | const downloadlink = await axios.get(url1+''+url2+''+url3,{ responseType: 'application/json', headers: {'Authorization' : 'Bearer '+process.env.ADM, 'Accept': 'application/octet-stream'}}); 26 | const response = await axios.get(downloadlink.data.data.token.url,{ responseType: 'stream', headers: {'Authorization' : 'Bearer '+process.env.ADM, 'Accept': 'application/octet-stream'}}); 27 | response.data.pipe(writer) 28 | return new Promise((resolve, reject) => { 29 | writer.on('finish', resolve) 30 | writer.on('error', reject) 31 | }) 32 | } 33 | 34 | // MONGODB USERNAME GOES HERE, ALSO INCLUDE CLUSTER NAME - 35 | mongoose.connect('mongodb+srv://:' + process.env.MONGO + '@.mongodb.net/test?retryWrites=true&w=majority', { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, }); 36 | 37 | db.on('error', console.error.bind(console, 'connection error:')); 38 | 39 | const playerSchema = mongoose.Schema({ 40 | playerValue: { 41 | type: String, 42 | unique: true 43 | }, 44 | dayzId: { 45 | type: String 46 | } 47 | }); 48 | 49 | let playerModel 50 | try { 51 | playerModel = mongoose.model('Player'); 52 | } catch (error) { 53 | playerModel = mongoose.model('Player', playerSchema); 54 | } 55 | 56 | function auditFile () { 57 | db.once('open', function(){ 58 | downloadFile().catch().then(()=>{ 59 | console.log('beginning audit of gameserver TEST'); 60 | const rl = readline.createInterface({ 61 | input: fs.createReadStream('./logs/serverlog.ADM',{encoding: 'utf8'}), 62 | }); 63 | rl.on('line',(input)=>{ 64 | if (input.includes('is connected')) { 65 | const playerInput = input.slice(19,-60); 66 | const idInput = input.slice(-45) 67 | playerModel.findOne({playerValue: playerInput}, (err, playerDoc)=> { 68 | if (err) return 69 | if(!playerDoc) { 70 | const newPlayer = new playerModel({ 71 | playerValue: playerInput, 72 | dayzId: idInput 73 | }); 74 | newPlayer.save(function(err, saved){ 75 | if (err) return console.error(err); 76 | if (saved) console.log(`${playerInput} was saved to the databse`) 77 | }); 78 | } 79 | else 80 | console.log(`${playerInput} already exists in the database !`); 81 | }); 82 | } 83 | else return; 84 | }); 85 | rl.on('close', () =>{ 86 | console.log(`{readline is closing}`); 87 | rl.close(); 88 | }); 89 | }).then(()=>{ 90 | playerModel.find(function (err, players) { 91 | if (err) return console.error(err); 92 | console.log(`** TOTAL AMOUNT OF UNIQUE PLAYERS ** : ${players.length}`) 93 | }); 94 | }); 95 | }); 96 | } 97 | auditFile(); 98 | },1500000); 99 | --------------------------------------------------------------------------------