Initial commit
This commit is contained in:
commit
effeacf214
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
node_modules/
|
||||
test/
|
||||
config/*.json
|
||||
*.log
|
||||
*.db
|
||||
*.sql
|
15
ConfigReader.js
Normal file
15
ConfigReader.js
Normal file
|
@ -0,0 +1,15 @@
|
|||
const fs=require('fs')
|
||||
const path=require('path')
|
||||
|
||||
console.log("[Start] Reading config...")
|
||||
let Config=null
|
||||
try {
|
||||
Config=JSON.parse(fs.readFileSync(path.join("config","config.json")))
|
||||
} catch (e) {
|
||||
console.log("[Fatal] Failed to read config. Stopped.")
|
||||
console.log(e.toString())
|
||||
throw e
|
||||
}
|
||||
console.log("[Done] Config is ready.")
|
||||
|
||||
module.exports=Config
|
11
DatabaseProvider.js
Normal file
11
DatabaseProvider.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
class DatabaseProvider {
|
||||
constructor(db) {
|
||||
this.db=db
|
||||
}
|
||||
|
||||
makeTables() {
|
||||
return this.db.makeTables()
|
||||
}
|
||||
}
|
||||
|
||||
module.exports=DatabaseProvider
|
12
DeveloperNote.md
Normal file
12
DeveloperNote.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
# File Store Developer Note
|
||||
|
||||
Deployment & Run
|
||||
|
||||
```
|
||||
git clone http://kiritow.com:3000/kiritow/filestore
|
||||
cd filestore
|
||||
cp config/config.json.example config/config.json
|
||||
vim config.json
|
||||
npm install
|
||||
node app
|
||||
```
|
5
Readme.md
Normal file
5
Readme.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# File Store
|
||||
|
||||
File Store & Management.
|
||||
|
||||
See [Developer Note](DeveloperNote.md) for more information.
|
34
SimpleLogger.js
Normal file
34
SimpleLogger.js
Normal file
|
@ -0,0 +1,34 @@
|
|||
const fs=require('fs')
|
||||
const Config=require('./ConfigReader')
|
||||
|
||||
class SimpleLogger {
|
||||
constructor(invoker,log_file) {
|
||||
this.invoker=invoker
|
||||
this.stream=fs.createWriteStream(log_file)
|
||||
this.stream.write(`Simple Logger Initialized at ${new Date().toLocaleString()}\n`)
|
||||
}
|
||||
log(str) {
|
||||
this.invoker.log(str)
|
||||
this.stream.write(`${new Date().toLocaleString()} | ${str}\n`)
|
||||
}
|
||||
}
|
||||
|
||||
class SimpleLoggerInvoker {
|
||||
constructor(logger,abbr) {
|
||||
this.logger=logger
|
||||
this.abbr=abbr
|
||||
}
|
||||
log(str) {
|
||||
this.logger.log(this.logger,`${this.abbr} | ${str}`)
|
||||
}
|
||||
}
|
||||
|
||||
let theLogger=new SimpleLogger(console,Config.log_name)
|
||||
|
||||
module.exports=function(abbr) {
|
||||
if(abbr) {
|
||||
return new SimpleLoggerInvoker(theLogger,abbr)
|
||||
} else {
|
||||
return theLogger
|
||||
}
|
||||
}
|
54
app.js
Normal file
54
app.js
Normal file
|
@ -0,0 +1,54 @@
|
|||
const fs=require('fs')
|
||||
const path=require('path')
|
||||
const promisify=require('util').promisify
|
||||
|
||||
const dbprovider=require('./DatabaseProvider')
|
||||
|
||||
const Config=require('./ConfigReader')
|
||||
const logger=require('./SimpleLogger')()
|
||||
|
||||
logger.log("[Start] Initializing database provider...")
|
||||
let db=null
|
||||
try {
|
||||
let provider=`./database_${Config.db_engine.toLowerCase()}`
|
||||
logger.log(`[Working] Provider resolved to ${provider}`)
|
||||
let providerClass=require(provider)
|
||||
db=new dbprovider(new providerClass)
|
||||
} catch (e) {
|
||||
logger.log("[Fatal] Failed to create db provider.")
|
||||
logger.log(e.toString())
|
||||
return
|
||||
}
|
||||
logger.log("[Done] Database provider Initialized.")
|
||||
|
||||
async function ScanSingle(retArr,filepath) {
|
||||
let stat=await promisify(fs.stat)(filepath)
|
||||
if(stat.isDirectory()) {
|
||||
return ScanDir(retArr,filepath)
|
||||
} else if(stat.isFile()) {
|
||||
retArr.push({path:filepath,mtime:stat.mtime,size:stat.size})
|
||||
}
|
||||
}
|
||||
|
||||
async function ScanDir(retArr,dir) {
|
||||
logger.log(`Scanning ${dir}...`)
|
||||
let files=await promisify(fs.readdir)(dir)
|
||||
let pArr=new Array
|
||||
files.forEach((file)=>{
|
||||
pArr.push(ScanSingle(retArr,path.join(dir,file)))
|
||||
})
|
||||
return Promise.all(pArr)
|
||||
}
|
||||
|
||||
async function main() {
|
||||
logger.log(`[Start] About to scan ${Config.scan_path.length} dir${Config.scan_path.length>1?"s":""}...`)
|
||||
let retArr=new Array
|
||||
let pArr=new Array
|
||||
Config.scan_path.forEach((dir)=>{
|
||||
pArr.push(ScanDir(retArr,dir))
|
||||
})
|
||||
await Promise.all(pArr)
|
||||
logger.log(`[Done] Scan Finished. ${retArr.length} results in set.`)
|
||||
}
|
||||
|
||||
main()
|
17
config/config.json.example
Normal file
17
config/config.json.example
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"db_engine":"sqlite3",
|
||||
"db_info":{
|
||||
"username":"db_username_here",
|
||||
"password":"db_password_here",
|
||||
"host":"localhost",
|
||||
"port":3306,
|
||||
"dbname":"your_dbname_here"
|
||||
},
|
||||
"log_name":"filestore.log",
|
||||
"scan_path":[],
|
||||
"ignore_types":[],
|
||||
"filestore_account":{
|
||||
"username":"your_username_here",
|
||||
"password":"your_password_here"
|
||||
}
|
||||
}
|
19
database_sqlite3.js
Normal file
19
database_sqlite3.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
const sqlite3=require('sqlite3')
|
||||
const Config=require('./ConfigReader')
|
||||
const logger=require('./SimpleLogger')("[SQLite3 Driver]")
|
||||
|
||||
class DatabaseSQLite3Provider {
|
||||
constructor() {
|
||||
logger.log(`Opening database file: ${Config.db_info.dbname}.db`)
|
||||
this.db=new sqlite3.Database(`${Config.db_info.dbname}.db`,(err)=>{
|
||||
if(err) {
|
||||
logger.log(`[Fatal] ${e.toString()}`)
|
||||
throw err
|
||||
} else {
|
||||
logger.log("Database opened.")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
module.exports=DatabaseSQLite3Provider
|
22
package.json
Normal file
22
package.json
Normal file
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"name": "filestore",
|
||||
"version": "0.0.1",
|
||||
"description": "File Store & Management",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://kiritow.com:3000/Kiritow/FileStore"
|
||||
},
|
||||
"keywords": [
|
||||
"Node",
|
||||
"File"
|
||||
],
|
||||
"author": "Kiritow",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"sqlite3": "^4.0.6"
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user