forked from Tank/braga
front
This commit is contained in:
parent
d84e55d891
commit
dbcedd2348
BIN
database/16
Normal file
BIN
database/16
Normal file
Binary file not shown.
142
database/array.lua
Normal file
142
database/array.lua
Normal file
@ -0,0 +1,142 @@
|
||||
local _M = {}
|
||||
|
||||
function _M.keys(t)
|
||||
local keys = {}
|
||||
for key,_ in pairs(t) do
|
||||
table.insert(keys, key)
|
||||
end
|
||||
return keys
|
||||
end
|
||||
|
||||
function _M.count(t)
|
||||
local count = 0
|
||||
for key,_ in pairs(t) do
|
||||
count = count + 1
|
||||
end
|
||||
return count
|
||||
end
|
||||
|
||||
function _M.first(t)
|
||||
for key,val in pairs(t) do
|
||||
return key,val
|
||||
end
|
||||
end
|
||||
|
||||
function _M.merge(...)
|
||||
local arg = {...}
|
||||
if not arg[1] then return nil end
|
||||
for i,v in ipairs(arg) do
|
||||
for key,val in pairs(arg[i]) do
|
||||
arg[1][key] = val
|
||||
end
|
||||
end
|
||||
return arg[1]
|
||||
end
|
||||
|
||||
function _M.sort(t)
|
||||
table.sort(t)
|
||||
return _M.values(t)
|
||||
end
|
||||
|
||||
function _M.values(t)
|
||||
local results = {}
|
||||
for k,v in pairs(t) do
|
||||
table.insert(results,v)
|
||||
end
|
||||
return results
|
||||
end
|
||||
|
||||
function _M.sort_by_keys(t)
|
||||
local keys = {}
|
||||
local results = {}
|
||||
for k,v in pairs(t) do
|
||||
table.insert(keys,k)
|
||||
end
|
||||
table.sort(keys)
|
||||
for k,v in pairs(keys) do
|
||||
table.insert(results,t[k])
|
||||
end
|
||||
return results
|
||||
end
|
||||
|
||||
function _M.ordnung(t)
|
||||
local res = {}
|
||||
for key,val in pairs(t) do
|
||||
if val.order then
|
||||
res[val.order] = {}
|
||||
res[val.order][key] = val
|
||||
else table.insert(res,t[key]) end
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
function _M.minkey(t)
|
||||
local a = {}
|
||||
for n in pairs(t) do table.insert(a, n) end
|
||||
table.sort(a)
|
||||
return a[1]
|
||||
end
|
||||
|
||||
function _M.in_array(t,val)
|
||||
for _,v in ipairs(t) do
|
||||
if v == val then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function _M.implode(t,before,after,sep)
|
||||
local result = ''
|
||||
local count = _M.count(t)
|
||||
for key,val in pairs(t) do
|
||||
result = result..before..val..after
|
||||
if key < count then result = result..sep end
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function _M.binary_search(arr, target)
|
||||
local left = 1
|
||||
local right = #arr
|
||||
while left <= right do
|
||||
local mid = math.floor((left + right) / 2)
|
||||
if arr[mid] == target then
|
||||
return mid
|
||||
elseif arr[mid] < target then
|
||||
left = mid + 1
|
||||
else
|
||||
right = mid - 1
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
function _M.explode(t,delimiter)
|
||||
local result = { }
|
||||
local from = 1
|
||||
local delim_from, delim_to = string.find(t, '%'..delimiter, from )
|
||||
while delim_from do
|
||||
table.insert( result, string.sub(t, from , delim_from-1 ) )
|
||||
from = delim_to + 1
|
||||
delim_from, delim_to = string.find(t, '%'..delimiter, from )
|
||||
end
|
||||
table.insert( result, string.sub(t, from ) )
|
||||
return result
|
||||
end
|
||||
|
||||
function _M.clear(t)
|
||||
local result = {}
|
||||
for key,data in pairs(t) do
|
||||
if data ~= nil then table.insert(result,data) end
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function _M.blank(t,default)
|
||||
local results = {}
|
||||
for _,v in ipairs(t) do
|
||||
results[''..v] = default
|
||||
end
|
||||
return results
|
||||
end
|
||||
|
||||
return _M
|
||||
BIN
database/cellar
Normal file
BIN
database/cellar
Normal file
Binary file not shown.
86
database/flatdb.lua
Normal file
86
database/flatdb.lua
Normal file
@ -0,0 +1,86 @@
|
||||
local mp = require("MessagePack")
|
||||
|
||||
local function isFile(path)
|
||||
local f = io.open(path, "r")
|
||||
if f then
|
||||
f:close()
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function isDir(path)
|
||||
path = string.gsub(path.."/", "//", "/")
|
||||
local ok, err, code = os.rename(path, path)
|
||||
if ok or code == 13 then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function load_page(path)
|
||||
local ret
|
||||
local f = io.open(path, "rb")
|
||||
if f then
|
||||
ret = mp.unpack(f:read("*a"))
|
||||
f:close()
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
local function store_page(path, page)
|
||||
if type(page) == "table" then
|
||||
local f = io.open(path, "wb")
|
||||
if f then
|
||||
f:write(mp.pack(page))
|
||||
f:close()
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local pool = {}
|
||||
|
||||
local db_funcs = {
|
||||
save = function(db, p)
|
||||
if p then
|
||||
if type(p) == "string" and type(db[p]) == "table" then
|
||||
return store_page(pool[db].."/"..p, db[p])
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
for p, page in pairs(db) do
|
||||
if not store_page(pool[db].."/"..p, page) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
}
|
||||
|
||||
local mt = {
|
||||
__index = function(db, k)
|
||||
if db_funcs[k] then return db_funcs[k] end
|
||||
if k and pool[db] and isFile(pool[db].."/"..k) then
|
||||
db[k] = load_page(pool[db].."/"..k)
|
||||
end
|
||||
return rawget(db, k)
|
||||
end
|
||||
}
|
||||
|
||||
pool.hack = db_funcs
|
||||
|
||||
return setmetatable(pool, {
|
||||
__mode = "kv",
|
||||
__call = function(pool, path)
|
||||
assert(isDir(path), path.." is not a directory.")
|
||||
if pool[path] then return pool[path] end
|
||||
local db = {}
|
||||
setmetatable(db, mt)
|
||||
pool[path] = db
|
||||
pool[db] = path
|
||||
return db
|
||||
end
|
||||
})
|
||||
BIN
database/room
Normal file
BIN
database/room
Normal file
Binary file not shown.
54
database/sensors.lua
Normal file
54
database/sensors.lua
Normal file
@ -0,0 +1,54 @@
|
||||
local array = require("database.array")
|
||||
local flatdb = require('database.flatdb')
|
||||
local date = require('date')
|
||||
local db = flatdb(ngx.var.document_root..'/database')
|
||||
|
||||
local _M = {}
|
||||
|
||||
_M.cellar = {}
|
||||
|
||||
_M.room = {}
|
||||
|
||||
if not db.cellar then
|
||||
db.cellar = {{temp=0, date = os.date('%Y-%m-%d %H:%M:%S'), warm=0, warm_status='is-danger',temp_status='is-warning'}}
|
||||
db:save()
|
||||
end
|
||||
|
||||
if not db.room then
|
||||
db.room = {{temp=0, date = os.date('%Y-%m-%d %H:%M:%S'), warm=0, warm_status='is-danger',temp_status='is-warning'}}
|
||||
db:save()
|
||||
end
|
||||
|
||||
function _M.cellar.now()
|
||||
return db.cellar[#db.cellar]
|
||||
end
|
||||
|
||||
function _M.cellar.data(start,ends)
|
||||
if not start then start = date(start) else start = date():addhours(-24) end
|
||||
if not ends then ends = date(ends) else ends = date() end
|
||||
local res = {}
|
||||
for key,val in pairs(db.cellar) do
|
||||
if date(val.date) >= start and date(val.date) <= ends then
|
||||
table.insert(res,val)
|
||||
end
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
function _M.room.now()
|
||||
return db.room[#db.room]
|
||||
end
|
||||
|
||||
function _M.room.data(start,ends)
|
||||
if not start then start = date(start) else start = date():addhours(-24) end
|
||||
if not ends then ends = date(ends) else ends = date() end
|
||||
local res = {}
|
||||
for key,val in pairs(db.room) do
|
||||
if date(val.date) >= start and date(val.date) <= ends then
|
||||
table.insert(res,val)
|
||||
end
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
return _M
|
||||
97
database/tanks.lua
Normal file
97
database/tanks.lua
Normal file
@ -0,0 +1,97 @@
|
||||
local array = require("database.array")
|
||||
local flatdb = require('database.flatdb')
|
||||
local date = require('date')
|
||||
local db = flatdb(ngx.var.document_root..'/database')
|
||||
|
||||
local _M = {}
|
||||
|
||||
local fields = {
|
||||
{sensor_id = 'ID сенсора'},
|
||||
{name = 'Название емкости'},
|
||||
{volume = 'Объем емкости'},
|
||||
{date_start = 'Дата постановки на брожение'},
|
||||
{raw_volume = 'Объем сока'},
|
||||
{honey_weight = 'Начальная масса добавленного меда'},
|
||||
{fructose_weight = 'Начальная масса добавленной фруктозы'},
|
||||
{dextrose_weight = 'Начальная масса добавленной декстрозы'},
|
||||
{polisugar_weight = 'Начальная масса добавленных полисахаров'},
|
||||
{ph = 'PH'},
|
||||
{sugar = 'Сахаристость'},
|
||||
{date_end = 'Дата снятия с осадка'},
|
||||
{date_restart = 'Дата постановки на повторное брожение'},
|
||||
{date_reend = 'Дата повторного снятия с осадка'},
|
||||
{date_blending = 'Дата купажа'},
|
||||
{date_fructose_add = 'Дата добавления фруктозы'},
|
||||
{add_fructose_weight = 'Масса добавляемой фруктозы'},
|
||||
{date_dextrose_add = 'Дата добавления декстрозы'},
|
||||
{add_dextrose_weight = 'Масса добавляемой декстрозы'},
|
||||
{date_polisugar_add = 'Дата добавления полисахаров'},
|
||||
{add_polisugar_weight = 'Масса добавляемых полисахаров'},
|
||||
{comment = 'Комментарии'},
|
||||
{archive = 'Архивная емкость'}
|
||||
}
|
||||
|
||||
local count = 0
|
||||
|
||||
local results = {}
|
||||
|
||||
for line in io.lines(ngx.var.document_root..'/tanks.csv') do
|
||||
if count>0 then
|
||||
local data = array.explode(line,',')
|
||||
results[count] = {notification = {typ = 'is-success', text = 'Брожение протекает нормально'}, status = 'is-primary'}
|
||||
for n,value in pairs(data) do
|
||||
local key,text = array.first(fields[n])
|
||||
if key:find('date_') and value ~='' and pcall(date(),value) and date(value) < date() then
|
||||
results[count].notification = {typ = 'is-danger', text = text}
|
||||
end
|
||||
results[count][key] = {value = value, text = text, order = n}
|
||||
end
|
||||
if not db[results[count].sensor_id.value] then
|
||||
db[results[count].sensor_id.value] = {
|
||||
{temp = 0, date = date():fmt('%Y-%d-%m')},
|
||||
{temp = 0, date = date():fmt('%Y-%d-%m')}
|
||||
}
|
||||
db:save()
|
||||
end
|
||||
results[count].stat = db[results[count].sensor_id.value]
|
||||
if (results[count]['date_blending'].value ~= '' and pcall(date(),results[count]['date_blending'].value) and date(results[count]['date_blending'].value) < date()) or (results[count]['date_end'].value ~= '' and date(results[count]['date_end'].value) < date()) then
|
||||
results[count].status = 'is-success'
|
||||
end
|
||||
end
|
||||
count = count + 1
|
||||
end
|
||||
|
||||
function _M.all()
|
||||
return results
|
||||
end
|
||||
|
||||
function _M.active(start,ends)
|
||||
if not start then start = date(start) else start = date():addhours(-24) end
|
||||
if not ends then ends = date(ends) else ends = date() end
|
||||
local res = {}
|
||||
for key,result in pairs(results) do
|
||||
if result.archive and result.archive.value ~= '' and tonumber(result.archive.value) ~= 1 then
|
||||
local stat = {}
|
||||
for i,val in pairs(result.stat) do
|
||||
if date(val.date) >= start and date(val.date) <= ends then
|
||||
table.insert(stat,val)
|
||||
end
|
||||
end
|
||||
result.stat = stat
|
||||
table.insert(res,result)
|
||||
end
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
function _M.archive()
|
||||
local res = {}
|
||||
for key,result in pairs(results) do
|
||||
if (result.archive and result.archive.value ~= '' and tonumber(result.archive.value) == 1) or (result['date_blending'].value ~= '' and pcall(date(),result['date_blending'].value) and date(result['date_blending'].value) < date()) then
|
||||
table.insert(res,result)
|
||||
end
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
return _M
|
||||
@ -1,116 +0,0 @@
|
||||
local _M = {}
|
||||
local resp = require('framework.resp')
|
||||
local shell = require "resty.shell"
|
||||
require("resty.session").init({
|
||||
remember = true,
|
||||
audience = "proxy",
|
||||
secret = "8UQW1fsdag",
|
||||
storage = "cookie",
|
||||
})
|
||||
|
||||
local login
|
||||
local password
|
||||
|
||||
local admin_login = 'nz8080'
|
||||
local admin_password = 'WarWind.Ru'
|
||||
|
||||
local error = {code = 400, error = 'Неизвестная ошибка авторизации'}
|
||||
|
||||
local errors = {
|
||||
NO_HEADER = {code = 400, error = 'Отсутствует заголовок для авторизации'},
|
||||
NO_BASIC = {code = 412, error = 'Неподдерживаемый тип авторизации'},
|
||||
NO_BASE = {code = 412, error = 'Неподдерживаемый тип строки авторизации'},
|
||||
NO_LOGIN = {code = 412, error = 'Не указан логин'},
|
||||
NO_PASSWORD = {code = 412, error = 'Не указан пароль'},
|
||||
BAD_LOGIN = {code = 403, error = 'Логин не верен'},
|
||||
BAD_PASSWORD = {code = 403, error = 'Пароль не верен'},
|
||||
BAD_USER = {code = 403, error = 'Пользователь не найден'},
|
||||
BAD_SALT = {code = 444, error = 'Неверный размер номера устройства'},
|
||||
BAD_SEED = {code = 444, error = 'Контрольная сумма не совпадает'},
|
||||
}
|
||||
|
||||
local function seed(salt)
|
||||
local ok, stdout, stderr, reason, status =
|
||||
shell.run('/home/zoviet/lock/decode/decode '..salt, '', 3000, 128)
|
||||
if not ok then
|
||||
return false
|
||||
end
|
||||
return tonumber(stdout)
|
||||
end
|
||||
|
||||
function get_auth()
|
||||
local auth = ngx.req.get_headers()['Authorization']
|
||||
if auth==nil then
|
||||
error = errors.NO_HEADER
|
||||
return false
|
||||
end
|
||||
auth = string.match(auth,'Basic (.+)')
|
||||
if auth==nil then
|
||||
error = errors.NO_BASIC
|
||||
return false
|
||||
end
|
||||
auth = ngx.decode_base64(auth)
|
||||
if auth==nil then
|
||||
error = errors.NO_BASE
|
||||
return false
|
||||
end
|
||||
login,password = string.match(auth,'(.+):(.+)')
|
||||
if login == nil then
|
||||
error = errors.NO_LOGIN
|
||||
return false
|
||||
end
|
||||
if password == nil then
|
||||
error = errors.NO_PASSWORD
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function _M.resp()
|
||||
return resp(nil,error)
|
||||
end
|
||||
|
||||
function _M.error()
|
||||
return error.error
|
||||
end
|
||||
|
||||
-- Авторизация админа
|
||||
|
||||
function _M.admin()
|
||||
if not get_auth() then return false end
|
||||
if admin_login ~= login then
|
||||
error = errors.BAD_LOGIN
|
||||
return false
|
||||
end
|
||||
if admin_password ~= password then
|
||||
error = errors.BAD_PASSWORD
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
-- Авторизация админ-панели
|
||||
|
||||
function _M.front(login,password)
|
||||
if admin_login ~= login then
|
||||
error = errors.BAD_LOGIN
|
||||
return false
|
||||
end
|
||||
if admin_password ~= password then
|
||||
error = errors.BAD_PASSWORD
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
-- Авторизация через сессии
|
||||
|
||||
function _M.session()
|
||||
local ses = require "resty.session".start()
|
||||
print(ses:get("login"))
|
||||
if _M.front(ses:get("login"),ses:get("password")) then return true end
|
||||
require "resty.session".destroy()
|
||||
ngx.redirect('/login')
|
||||
end
|
||||
|
||||
return _M
|
||||
21
front/archive.lua
Normal file
21
front/archive.lua
Normal file
@ -0,0 +1,21 @@
|
||||
local template = require "resty.template"
|
||||
local handle = require('framework.handle')
|
||||
local tanks = require('database.tanks')
|
||||
|
||||
local function resp(start,ends)
|
||||
local view = template.new("archive.html", "layout.html")
|
||||
view.title = "Мои архивные чаны"
|
||||
view.cellar = {temp=12, warm=45, warm_status='is-danger',temp_status='is-warning'}
|
||||
view.room = {temp=18, warm=45,warm_status='is-success',temp_status='is-warning'}
|
||||
view.tanks = tanks.archive()
|
||||
view:render()
|
||||
end
|
||||
|
||||
local request = {
|
||||
GET = function()
|
||||
resp()
|
||||
end
|
||||
}
|
||||
|
||||
ngx.say(handle(request))
|
||||
|
||||
@ -1,9 +1,15 @@
|
||||
local template = require "resty.template"
|
||||
local handle = require('framework.handle')
|
||||
local sensors = require('database.sensors')
|
||||
|
||||
local function resp(start,ends)
|
||||
local view = template.new("index.html", "layout.html")
|
||||
view.title = "Бродильные емкости"
|
||||
local view = template.new("climate.html", "layout.html")
|
||||
view.start = start
|
||||
view.ends = ends
|
||||
view.title = "Микроклимат подвала"
|
||||
view.data = sensors.cellar.data(start,ends)
|
||||
view.cellar = sensors.cellar.now()
|
||||
view.room = sensors.room.now()
|
||||
view:render()
|
||||
end
|
||||
|
||||
@ -1,21 +1,16 @@
|
||||
local template = require "resty.template"
|
||||
local handle = require('framework.handle')
|
||||
local tanks = require('database.tanks')
|
||||
local sensors = require('database.sensors')
|
||||
|
||||
local function resp(start,ends)
|
||||
local view = template.new("index.html", "layout.html")
|
||||
view.start = start
|
||||
view.ends = ends
|
||||
view.title = "Мои чаны"
|
||||
view.cellar = {temp=12, warm=45, warm_status='is-danger',temp_status='is-warning'}
|
||||
view.room = {temp=18, warm=45,warm_status='is-success',temp_status='is-warning'}
|
||||
view.stat = {
|
||||
{temp = 16, day = '2026-03-02'},
|
||||
{temp = 17, day = '2026-03-03'},
|
||||
{temp = 18, day = '2026-03-04'},
|
||||
{temp = 17, day = '2026-03-05'},
|
||||
{temp = 15, day = '2026-03-06'}
|
||||
}
|
||||
view.tank = {status = 'is-primary'}
|
||||
view.title = "Мои активные чаны"
|
||||
view.cellar = sensors.cellar.now()
|
||||
view.room = sensors.room.now()
|
||||
view.tanks = tanks.active(start,ends)
|
||||
view:render()
|
||||
end
|
||||
|
||||
|
||||
30
front/room.lua
Normal file
30
front/room.lua
Normal file
@ -0,0 +1,30 @@
|
||||
local template = require "resty.template"
|
||||
local handle = require('framework.handle')
|
||||
local sensors = require('database.sensors')
|
||||
|
||||
local function resp(start,ends)
|
||||
local view = template.new("climate.html", "layout.html")
|
||||
view.start = start
|
||||
view.ends = ends
|
||||
view.title = "Микроклимат бродильни"
|
||||
view.data = sensors.room.data(start,ends)
|
||||
view.cellar = sensors.cellar.now()
|
||||
view.room = sensors.room.now()
|
||||
view:render()
|
||||
end
|
||||
|
||||
local request = {
|
||||
POST = function()
|
||||
ngx.req.read_body()
|
||||
local args, err = ngx.req.get_post_args()
|
||||
resp(string.match(args['datetimes'], "([%d-%s:]+)%s>%s([%d-%s:]+)"))
|
||||
end,
|
||||
GET = function()
|
||||
local ends = os.date('%Y-%m-%d %H:%M:%S',os.time()+14400)
|
||||
local start = os.date('%Y-%m-%d %H:%M:%S',os.time()-86400)
|
||||
resp(start,ends)
|
||||
end
|
||||
}
|
||||
|
||||
ngx.say(handle(request))
|
||||
|
||||
6
getcsv.sh
Normal file
6
getcsv.sh
Normal file
@ -0,0 +1,6 @@
|
||||
curl -LJO \
|
||||
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" \
|
||||
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" \
|
||||
'https://docs.google.com/spreadsheets/d/e/2PACX-1vQrEP1eukYo2fnNs5zsQgmZTcS1PzIDYL46Lw7un1_v70jP6mgBFqpjOJno9ic-W03PrlxsC3s3YiWA/pub?gid=0&single=true&output=csv'
|
||||
|
||||
mv braga-1.csv tanks.csv
|
||||
424
logs/error.log
424
logs/error.log
@ -462,3 +462,427 @@ coroutine 0:
|
||||
2026/03/08 15:46:02 [error] 8789#0: *34 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 15:46:03 [error] 8788#0: *36 open() "/var/www/braga/installHook.js.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /installHook.js.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 15:52:18 [error] 8788#0: *38 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 20:36:13 [error] 3921#0: *1 lua entry thread aborted: runtime error: /var/www/braga/database/csv.lua:7: bad argument #1 to 'lines' (/var/www/bragatanks.csv: No such file or directory)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'require'
|
||||
/var/www/braga/front/index.lua:3: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 20:36:13 [error] 3921#0: *7 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 20:36:15 [error] 3921#0: *8 lua entry thread aborted: runtime error: /var/www/braga/database/csv.lua:7: bad argument #1 to 'lines' (/var/www/bragatanks.csv: No such file or directory)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'require'
|
||||
/var/www/braga/front/index.lua:3: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 20:36:43 [error] 3921#0: *9 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:18:24 [error] 3921#0: *10 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:21:55 [error] 3921#0: *11 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:22:05 [error] 3921#0: *12 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:22:20 [error] 3921#0: *14 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:23:00 [error] 3921#0: *14 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:24:26 [error] 3921#0: *14 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:24:58 [error] 3921#0: *14 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:26:29 [error] 3921#0: *14 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:40:19 [error] 3921#0: *15 lua entry thread aborted: runtime error: /usr/local/share/lua/5.1/date.lua:394: invalid date time value
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'require'
|
||||
/var/www/braga/front/index.lua:3: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:45:11 [error] 3921#0: *16 lua entry thread aborted: runtime error: /usr/local/share/lua/5.1/date.lua:394: invalid date time value
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'require'
|
||||
/var/www/braga/front/index.lua:3: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:47:12 [error] 3921#0: *17 lua entry thread aborted: runtime error: [string "context=... or {}..."]:112: attempt to index local 'record' (a number value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:48:11 [error] 3921#0: *18 lua entry thread aborted: runtime error: [string "context=... or {}..."]:112: attempt to index local 'record' (a number value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:48:35 [error] 3922#0: *23 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:48:57 [error] 3921#0: *25 lua entry thread aborted: runtime error: [string "context=... or {}..."]:112: attempt to index local 'record' (a number value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:49:36 [error] 3921#0: *26 lua entry thread aborted: runtime error: [string "context=... or {}..."]:115: attempt to get length of global 'stat' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:49:54 [error] 3921#0: *27 lua entry thread aborted: runtime error: [string "context=... or {}..."]:114: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:51:17 [error] 3921#0: *29 lua entry thread aborted: runtime error: [string "context=... or {}..."]:104: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:51:30 [error] 3921#0: *30 lua entry thread aborted: runtime error: [string "context=... or {}..."]:115: attempt to get length of global 'stat' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:51:31 [error] 3921#0: *31 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:51:47 [error] 3921#0: *32 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:51:47 [error] 3921#0: *31 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:51:58 [error] 3921#0: *32 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:51:59 [error] 3921#0: *31 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:52:14 [error] 3921#0: *31 lua entry thread aborted: runtime error: [string "context=... or {}..."]:112: attempt to index local 'record' (a number value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:52:14 [error] 3921#0: *33 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:54:19 [error] 3921#0: *34 lua entry thread aborted: runtime error: [string "context=... or {}..."]:114: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:54:19 [error] 3921#0: *35 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:54:20 [error] 3921#0: *35 lua entry thread aborted: runtime error: [string "context=... or {}..."]:114: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:54:20 [error] 3921#0: *36 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:55:26 [error] 3921#0: *36 lua entry thread aborted: runtime error: [string "context=... or {}..."]:115: attempt to get length of global 'stat' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:55:26 [error] 3921#0: *37 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:57:50 [error] 3921#0: *38 lua entry thread aborted: runtime error: error loading module 'database.tanks' from file '/var/www/braga/database/tanks.lua':
|
||||
/var/www/braga/database/tanks.lua:60: '}' expected (to close '{' at line 58) near '{'
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'require'
|
||||
/var/www/braga/front/index.lua:3: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:57:50 [error] 3921#0: *39 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:58:05 [error] 3921#0: *39 lua entry thread aborted: runtime error: [string "context=... or {}..."]:115: attempt to get length of global 'stat' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:58:05 [error] 3921#0: *40 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:58:45 [error] 3921#0: *40 lua entry thread aborted: runtime error: [string "context=... or {}..."]:121: bad argument #1 to 'pairs' (table expected, got nil)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'pairs'
|
||||
[string "context=... or {}..."]:121: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:58:45 [error] 3921#0: *41 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 21:59:56 [error] 3921#0: *41 lua entry thread aborted: runtime error: [string "context=... or {}..."]:137: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 21:59:56 [error] 3921#0: *42 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:00:36 [error] 3921#0: *42 lua entry thread aborted: runtime error: [string "context=... or {}..."]:137: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:00:36 [error] 3921#0: *43 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:00:37 [error] 3921#0: *43 lua entry thread aborted: runtime error: [string "context=... or {}..."]:137: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:00:37 [error] 3921#0: *44 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:00:38 [error] 3921#0: *44 lua entry thread aborted: runtime error: [string "context=... or {}..."]:137: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:00:38 [error] 3921#0: *45 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:00:38 [error] 3921#0: *45 lua entry thread aborted: runtime error: [string "context=... or {}..."]:137: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:00:38 [error] 3921#0: *46 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:00:38 [error] 3921#0: *46 lua entry thread aborted: runtime error: [string "context=... or {}..."]:137: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:00:39 [error] 3921#0: *47 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:00:39 [error] 3921#0: *47 lua entry thread aborted: runtime error: [string "context=... or {}..."]:137: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:00:39 [error] 3921#0: *48 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:01:20 [error] 3921#0: *48 lua entry thread aborted: runtime error: [string "context=... or {}..."]:137: attempt to index field 'value' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:01:20 [error] 3921#0: *49 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:01:38 [error] 3921#0: *50 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:01:39 [error] 3921#0: *49 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:03:08 [error] 3921#0: *50 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:03:09 [error] 3921#0: *49 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:06:13 [error] 3921#0: *53 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:06:14 [error] 3921#0: *52 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:07:24 [error] 3921#0: *53 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:07:25 [error] 3921#0: *52 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:08:55 [error] 3921#0: *53 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:08:56 [error] 3921#0: *52 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:11:48 [error] 3921#0: *55 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:11:50 [error] 3921#0: *54 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:13:03 [error] 3921#0: *54 lua entry thread aborted: runtime error: [string "context=... or {}..."]:91: attempt to index field 'name' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:13:04 [error] 3921#0: *56 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:13:41 [error] 3921#0: *55 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:13:42 [error] 3921#0: *56 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:16:19 [error] 3921#0: *57 lua entry thread aborted: runtime error: [string "context=... or {}..."]:91: attempt to index field 'name' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:311: in function 'render'
|
||||
/var/www/braga/front/index.lua:13: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:16:19 [error] 3921#0: *58 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:17:09 [error] 3921#0: *60 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:17:30 [error] 3921#0: *58 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:21:32 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:21:34 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:22:11 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:22:13 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:22:57 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:22:59 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:23:34 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:23:36 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:24:03 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:24:04 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:25:05 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:25:05 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:26:29 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:26:30 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:27:07 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:27:09 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:27:24 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:27:25 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:28:13 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:28:14 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:28:43 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:28:45 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:30:04 [error] 3921#0: *63 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:30:05 [error] 3921#0: *62 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:32:51 [error] 3921#0: *65 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:32:51 [error] 3921#0: *66 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:34:14 [error] 3921#0: *65 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:34:15 [error] 3921#0: *66 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:34:42 [error] 3921#0: *65 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:34:42 [error] 3921#0: *66 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:35:13 [error] 3921#0: *65 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:35:14 [error] 3921#0: *66 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:38:40 [error] 3921#0: *67 lua entry thread aborted: runtime error: /var/www/braga/database/array.lua:20: bad argument #1 to 'pairs' (table expected, got nil)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'require'
|
||||
/var/www/braga/front/index.lua:3: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:38:40 [error] 3921#0: *68 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:38:42 [error] 3921#0: *68 lua entry thread aborted: runtime error: /var/www/braga/database/array.lua:20: bad argument #1 to 'pairs' (table expected, got nil)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'require'
|
||||
/var/www/braga/front/index.lua:3: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:38:42 [error] 3921#0: *69 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:39:20 [error] 3921#0: *69 lua entry thread aborted: runtime error: /var/www/braga/database/array.lua:20: bad argument #1 to 'pairs' (table expected, got nil)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'require'
|
||||
/var/www/braga/front/index.lua:3: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:39:20 [error] 3921#0: *70 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:40:21 [error] 3921#0: *71 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:40:22 [error] 3921#0: *70 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:44:34 [error] 3921#0: *74 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:44:36 [error] 3921#0: *73 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:44:47 [error] 3921#0: *73 lua entry thread aborted: runtime error: /var/www/braga/database/tanks.lua:83: bad argument #1 to 'insert' (table expected, got nil)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'insert'
|
||||
/var/www/braga/database/tanks.lua:83: in function 'active'
|
||||
/var/www/braga/front/index.lua:12: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:44:47 [error] 3921#0: *72 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:47:28 [error] 3921#0: *77 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:47:29 [error] 3921#0: *76 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:47:54 [error] 3921#0: *77 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:47:56 [error] 3921#0: *76 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:48:50 [error] 3921#0: *77 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:48:51 [error] 3921#0: *76 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:50:25 [error] 3921#0: *77 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:50:26 [error] 3921#0: *76 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:53:11 [error] 3921#0: *79 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:53:12 [error] 3921#0: *78 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:55:14 [error] 3921#0: *81 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:55:15 [error] 3921#0: *80 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:55:19 [error] 3921#0: *81 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:55:20 [error] 3921#0: *80 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:56:38 [error] 3921#0: *81 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:56:38 [error] 3921#0: *80 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 22:56:53 [error] 3921#0: *81 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 22:56:54 [error] 3921#0: *82 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:06:09 [error] 3921#0: *97 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 23:06:11 [error] 3921#0: *96 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:16:23 [error] 3921#0: *98 lua entry thread aborted: runtime error: invalid argument(s)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'addhours'
|
||||
/var/www/braga/database/tanks.lua:80: in function 'active'
|
||||
/var/www/braga/front/index.lua:12: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 23:16:24 [error] 3921#0: *99 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:18:09 [error] 3921#0: *99 lua entry thread aborted: runtime error: /usr/local/share/lua/5.1/date.lua:308: duplicate value: 8
|
||||
2026-08-03 Mar-03-%s
|
||||
...........^
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[C]: in function 'error'
|
||||
/usr/local/share/lua/5.1/date.lua:308: in function 'error_dup'
|
||||
/usr/local/share/lua/5.1/date.lua:312: in function 'setm'
|
||||
/usr/local/share/lua/5.1/date.lua:343: in function 'fnil'
|
||||
/usr/local/share/lua/5.1/date.lua:393: in function 'date_getdobj'
|
||||
/usr/local/share/lua/5.1/date.lua:698: in function 'date'
|
||||
/var/www/braga/database/tanks.lua:87: in function 'active'
|
||||
/var/www/braga/front/index.lua:12: in function 'resp'
|
||||
/var/www/braga/front/index.lua:25: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/index.lua:29: in main chunk, client: 127.0.0.1, server: braga, request: "GET / HTTP/1.1", host: "braga"
|
||||
2026/03/08 23:18:09 [error] 3921#0: *100 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:19:39 [error] 3921#0: *101 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 23:19:40 [error] 3921#0: *100 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:20:33 [error] 3921#0: *101 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 23:20:34 [error] 3921#0: *100 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/archive"
|
||||
2026/03/08 23:20:37 [error] 3921#0: *101 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 23:20:39 [error] 3921#0: *100 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:20:52 [error] 16268#0: *2 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 23:20:54 [error] 16268#0: *3 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:20:57 [error] 16268#0: *2 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 23:20:58 [error] 16268#0: *3 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/archive"
|
||||
2026/03/08 23:21:04 [error] 16268#0: *2 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 23:21:05 [error] 16268#0: *3 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:30:50 [error] 16268#0: *6 open() "/var/www/braga/public/css/style.css.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /public/css/style.css.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 23:30:51 [error] 16268#0: *7 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:46:05 [error] 16271#0: *19 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:46:06 [error] 16268#0: *20 open() "/var/www/braga/installHook.js.map" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /installHook.js.map HTTP/1.1", host: "braga"
|
||||
2026/03/08 23:47:41 [error] 16271#0: *19 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:47:44 [error] 16271#0: *19 lua entry thread aborted: runtime error: [string "context=... or {}..."]:67: attempt to index global 'room' (a nil value)
|
||||
stack traceback:
|
||||
coroutine 0:
|
||||
[string "context=... or {}..."]: in function 'process'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:652: in function 'render'
|
||||
/usr/local/share/lua/5.1/resty/template.lua:312: in function 'render'
|
||||
/var/www/braga/front/room.lua:11: in function 'resp'
|
||||
/var/www/braga/front/room.lua:23: in function 'transfer'
|
||||
/var/www/braga/framework/handle.lua:7: in function 'handle'
|
||||
/var/www/braga/front/room.lua:27: in main chunk, client: 127.0.0.1, server: braga, request: "GET /room HTTP/1.1", host: "braga", referrer: "http://braga/"
|
||||
2026/03/08 23:47:44 [error] 16268#0: *18 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/room"
|
||||
2026/03/08 23:49:59 [error] 16268#0: *22 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/room"
|
||||
2026/03/08 23:50:08 [error] 16268#0: *22 open() "/var/www/braga/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: braga, request: "GET /favicon.ico HTTP/1.1", host: "braga", referrer: "http://braga/cellar"
|
||||
|
||||
30
nginx.conf
30
nginx.conf
@ -1,3 +1,6 @@
|
||||
lua_package_path "/var/www/blog/?.lua;/var/www/braga/?.lua;/var/www/appphotos/?.lua;/var/www/apihh/?.lua;;";
|
||||
lua_code_cache off;
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name braga;
|
||||
@ -19,6 +22,33 @@
|
||||
content_by_lua_file /var/www/braga/front/index.lua;
|
||||
}
|
||||
|
||||
location /archive {
|
||||
default_type text/html;
|
||||
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||
proxy_connect_timeout 140;
|
||||
proxy_read_timeout 120;
|
||||
proxy_send_timeout 120;
|
||||
content_by_lua_file /var/www/braga/front/archive.lua;
|
||||
}
|
||||
|
||||
location /room {
|
||||
default_type text/html;
|
||||
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||
proxy_connect_timeout 140;
|
||||
proxy_read_timeout 120;
|
||||
proxy_send_timeout 120;
|
||||
content_by_lua_file /var/www/braga/front/room.lua;
|
||||
}
|
||||
|
||||
location /cellar {
|
||||
default_type text/html;
|
||||
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||
proxy_connect_timeout 140;
|
||||
proxy_read_timeout 120;
|
||||
proxy_send_timeout 120;
|
||||
content_by_lua_file /var/www/braga/front/cellar.lua;
|
||||
}
|
||||
|
||||
|
||||
location ~* \.(?:css(\.map)?|js(\.map)?|yaml|ico|json|pdf|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
|
||||
access_log off;
|
||||
|
||||
@ -72,5 +72,72 @@ $( document ).ready(function() {
|
||||
});
|
||||
});
|
||||
|
||||
$(".tank-data").each(function() {
|
||||
// Внутри каждого отдельного списка сортируем его пункты
|
||||
$(this).find("li").sort(function(a, b) {
|
||||
// Преобразуем строку в число и сравниваем порядок
|
||||
return parseInt($(a).attr("data-order"), 10) - parseInt($(b).attr("data-order"), 10);
|
||||
}).appendTo(this); // Перемещаем отсортированные пункты обратно в этот же список
|
||||
});
|
||||
|
||||
$('.full-info').click(function() {
|
||||
var id = $(this).data('id')
|
||||
if ($('#info'+id).hasClass('is-hidden')) {
|
||||
$('#info'+id).removeClass('is-hidden')
|
||||
} else {
|
||||
$('#info'+id).addClass('is-hidden')
|
||||
}
|
||||
});
|
||||
|
||||
if($('#climate1').length){
|
||||
new Chart($('#climate1'), {
|
||||
type: 'bar',
|
||||
data: {
|
||||
labels: $('#climate1').data('labels'),
|
||||
datasets: [{
|
||||
label: 'Температура воздуха',
|
||||
data: $('#climate1').data('vals'),
|
||||
borderWidth: 1,
|
||||
backgroundColor: [
|
||||
'rgb(255, 99, 132)',
|
||||
'rgb(54, 162, 235)',
|
||||
'rgb(255, 205, 86)'
|
||||
],
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
y: {
|
||||
beginAtZero: true
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
new Chart($('#climate2'), {
|
||||
type: 'bar',
|
||||
data: {
|
||||
labels: $('#climate2').data('labels'),
|
||||
datasets: [{
|
||||
label: 'Влажность',
|
||||
data: $('#climate2').data('vals'),
|
||||
borderWidth: 1,
|
||||
backgroundColor: [
|
||||
'rgb(255, 99, 132)',
|
||||
'rgb(54, 162, 235)',
|
||||
'rgb(255, 205, 86)'
|
||||
],
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
y: {
|
||||
beginAtZero: true
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
3
tanks.csv
Normal file
3
tanks.csv
Normal file
@ -0,0 +1,3 @@
|
||||
sensor_id,Название емкости,Объем емкости,Дата постановки на брожение,Объем сока,Начальная масса добавленного меда,Начальная масса добавленной фруктозы,Начальная масса добавленной декстрозы,Начальная масса добавленных полисахаров,PH,Сахаристость,Дата снятия с осадка,Дата постановки на повторное брожение,Дата повторного снятия с осадка,Дата купажа,Дата добавления фруктозы,Масса добавления фруктозы,Дата добавления декстрозы,Масса добавления декстрозы,Дата добавления полисахаров,Масса добавления полисахаров,Комментарии,Архив
|
||||
16,Тестовая емкость,38,03-08-2026,20,5,0,0,0,3,12,17-08-2026,17-08-2026,31-08-2026,31-08-2026,08-08-2026,0,08-08-2026,0,08-08-2026,0,тест,0
|
||||
16,Отбродившая емкость,38,03-08-2026,20,5,0,0,0,3,12,17-08-2026,17-08-2026,31-08-2026,31-08-2026,08-08-2026,0,08-08-2026,0,08-08-2026,0,тест,1
|
||||
|
36
templates/archive.html
Normal file
36
templates/archive.html
Normal file
@ -0,0 +1,36 @@
|
||||
<section class="container">
|
||||
<div class="columns is-multiline">
|
||||
<div class="column is-12">
|
||||
<h1 class="title">{{title}}</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="columns is-multiline">
|
||||
{% for id,tank in pairs(tanks) do %}
|
||||
<div class="column is-half">
|
||||
<h3 class="title is-4"><i class="fa fa-flask fa-fw" aria-hidden="true"></i><span class="tag {{tank.status}} is-large"><a class="full-info has-text-black" data-id="{{id}}">{{tank.name.value}}</a></span><span class="tag is-info has-text-black is-large is-pulled-right">PH: {{tank.ph.value}}</span></h3>
|
||||
<div class="notification {{tank.notification.typ}}">{{tank.notification.text}}</div>
|
||||
<div>
|
||||
<canvas id="daystats{{id}}" data-labels='[{% for key, record in pairs(tank.stat) do %}"{{record.date}}"{% if key ~= #tank.stat then %},{% end end %}]' data-vals='[{% for key, record in pairs(tank.stat) do %}{{record.temp}}{% if key ~= #tank.stat then %},{% end end %}]'></canvas>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="tags">
|
||||
<span class="tag is-info has-text-black is-large is-pulled-right">{{tank.date_start.value}}</span>
|
||||
<span class="tag is-success has-text-black is-large is-pulled-right">{{tank.volume.value}} л</span>
|
||||
<span class="tag is-success has-text-black is-large is-pulled-right">С-р: {{tank.sugar.value}}%</span>
|
||||
<span class="tag is-light has-text-black is-large is-pulled-right">{{tank.date_end.value}}</span>
|
||||
</div>
|
||||
<div id="info{{id}}" class="is-hidden">
|
||||
<ul class="tank-data">
|
||||
{% for key,val in pairs(tank) do
|
||||
if val.text and val.order then %}
|
||||
<li style="border-bottom: 1px dotted white" data-order="{{val.order}}">{{val.text}} <span class="is-pulled-right"><b>{{val.value}}</b></span></li>
|
||||
{% end end %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% end %}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
31
templates/climate.html
Normal file
31
templates/climate.html
Normal file
@ -0,0 +1,31 @@
|
||||
<section class="container">
|
||||
<div class="columns is-multiline">
|
||||
<div class="column is-12">
|
||||
<h1 class="title">{{title}}</h1>
|
||||
<p>Период: <span class="has-text-warning is-size-5">{{start}} - {{ends}}</span></p>
|
||||
<section class="block">
|
||||
<form method="POST">
|
||||
<div class="field is-grouped">
|
||||
<p class="control">
|
||||
<input class="input" id="dater" type="text" data-start="{{start}}" data-end="{{ends}}" name="datetimes" value="{{start}}|{{ends}}">
|
||||
</p>
|
||||
<p class="control">
|
||||
<button class="button" name="submit" type="submit" class="is-danger">Выбрать</button>
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="columns is-multiline">
|
||||
<div class="column is-half">
|
||||
<canvas id="climate1" data-labels='[{% for key, record in pairs(data) do %}"{{record.date}}"{% if key ~= #data then %},{% end end %}]' data-vals='[{% for key, record in pairs(data) do %}{{record.temp}}{% if key ~= #data then %},{% end end %}]'></canvas>
|
||||
</div>
|
||||
<div class="column is-half">
|
||||
<canvas id="climate2" data-labels='[{% for key, record in pairs(data) do %}"{{record.date}}"{% if key ~= #data then %},{% end end %}]' data-vals='[{% for key, record in pairs(data) do %}{{record.warm}}{% if key ~= #data then %},{% end end %}]'></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@ -1,6 +1,6 @@
|
||||
<section class="container">
|
||||
<div class="columns is-multiline">
|
||||
<div class="column is-8">
|
||||
<div class="column is-12">
|
||||
<h1 class="title">{{title}}</h1>
|
||||
<p>Период: <span class="has-text-warning is-size-5">{{start}} - {{ends}}</span></p>
|
||||
<section class="block">
|
||||
@ -16,91 +16,34 @@
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
<div class="column is-4">
|
||||
Подвал: <span class="tag {{cellar.temp_status}} is-large"><i class="fa fa-thermometer-three-quarters fa-fw" aria-hidden="true"></i>{{cellar.temp}}</span>
|
||||
<span class="tag {{cellar.warm_status}} is-large"><i class="fa fa-tint fa-fw" aria-hidden="true"></i>{{cellar.warm}}</span>
|
||||
<hr/>
|
||||
Бродня: <span class="tag {{room.temp_status}} is-large"><i class="fa fa-thermometer-three-quarters fa-fw" aria-hidden="true"></i>{{room.temp}}</span>
|
||||
<span class="tag {{room.warm_status}} is-large"><i class="fa fa-tint fa-fw" aria-hidden="true"></i>{{room.warm}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<div class="section">
|
||||
<div class="columns is-multiline">
|
||||
{% for id,tank in pairs(tanks) do %}
|
||||
<div class="column is-half">
|
||||
<h3 class="title is-4"><i class="fa fa-flask fa-fw" aria-hidden="true"></i><span class="tag {{tank.status}} is-large"><a class="full-info has-text-black" data-id="2">11 - квас на березовом соке</a></span><span class="tag is-info has-text-black is-large is-pulled-right">PH: 3.1</span></h3>
|
||||
<div class="notification is-danger">Пора добавить фруктозу в объеме 250 грамм</div>
|
||||
<h3 class="title is-4"><i class="fa fa-flask fa-fw" aria-hidden="true"></i><span class="tag {{tank.status}} is-large"><a class="full-info has-text-black" data-id="{{id}}">{{tank.name.value}}</a></span><span class="tag is-info has-text-black is-large is-pulled-right">PH: {{tank.ph.value}}</span></h3>
|
||||
<div class="notification {{tank.notification.typ}}">{{tank.notification.text}}</div>
|
||||
<div>
|
||||
<canvas id="daystats" data-labels='[{% for key, record in pairs(stat) do %}"{{record.day}}"{% if key ~= #stat then %},{% end end %}]' data-vals='[{% for key, record in pairs(stat) do %}{{record.temp}}{% if key ~= #stat then %},{% end end %}]'></canvas>
|
||||
<canvas id="daystats{{id}}" data-labels='[{% for key, record in pairs(tank.stat) do %}"{{record.date}}"{% if key ~= #tank.stat then %},{% end end %}]' data-vals='[{% for key, record in pairs(tank.stat) do %}{{record.temp}}{% if key ~= #tank.stat then %},{% end end %}]'></canvas>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="tags">
|
||||
<span class="tag is-info has-text-black is-large is-pulled-right">02.03.2026</span>
|
||||
<span class="tag is-success has-text-black is-large is-pulled-right">25 л</span>
|
||||
<span class="tag is-success has-text-black is-large is-pulled-right">С-р: 12%</span>
|
||||
<span class="tag is-light has-text-black is-large is-pulled-right">02.03.2026</span>
|
||||
<span class="tag is-info has-text-black is-large is-pulled-right">{{tank.date_start.value}}</span>
|
||||
<span class="tag is-success has-text-black is-large is-pulled-right">{{tank.volume.value}} л</span>
|
||||
<span class="tag is-success has-text-black is-large is-pulled-right">С-р: {{tank.sugar.value}}%</span>
|
||||
<span class="tag is-light has-text-black is-large is-pulled-right">{{tank.date_end.value}}</span>
|
||||
</div>
|
||||
<div id="info2" class="is-hidden">
|
||||
<ul>
|
||||
<li>Объем сусла: </li>
|
||||
<li>Объем сока: </li>
|
||||
<li>Начальная масса добавленного меда: </li>
|
||||
<li>Начальная масса добавленной фруктозы: </li>
|
||||
<li>Начальная масса добавленной декстрозы: </li>
|
||||
<li>Начальная масса добавленных полисахаров: </li>
|
||||
<li>Сахаристость: </li>
|
||||
<li>Дата постановки на брожение: </li>
|
||||
<li>Дата снятия с осадка: </li>
|
||||
<li>Дата постановки на повторное брожение: </li>
|
||||
<li>Дата повторного снятия с осадка: </li>
|
||||
<li>Дата купажа: </li>
|
||||
<li>Масса добавления фруктозы: </li>
|
||||
<li>Дата добавления фруктозы: </li>
|
||||
<li>Масса добавления декстрозы: </li>
|
||||
<li>Дата добавления декстрозы: </li>
|
||||
<li>Масса добавления полисахаров: </li>
|
||||
<li>Дата добавления полисахаров: </li>
|
||||
<div id="info{{id}}" class="is-hidden">
|
||||
<ul class="tank-data">
|
||||
{% for key,val in pairs(tank) do
|
||||
if val.text and val.order then %}
|
||||
<li style="border-bottom: 1px dotted white" data-order="{{val.order}}">{{val.text}} <span class="is-pulled-right"><b>{{val.value}}</b></span></li>
|
||||
{% end end %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="column is-half">
|
||||
<h3 class="title is-4"><i class="fa fa-flask fa-fw" aria-hidden="true"></i><span class="tag {{tank.status}} is-large"><a class="full-info has-text-black" data-id="2">12 - медовуха крепкая полусладкая</a></span><span class="tag is-info has-text-black is-large is-pulled-right">PH: 3.4</span></h3>
|
||||
<div class="notification is-success">Брожение протекает нормально</div>
|
||||
<div>
|
||||
<canvas id="daystats1" data-labels='[{% for key, record in pairs(stat) do %}"{{record.day}}"{% if key ~= #stat then %},{% end end %}]' data-vals='[{% for key, record in pairs(stat) do %}{{record.temp}}{% if key ~= #stat then %},{% end end %}]'></canvas>
|
||||
</div>
|
||||
<br/>
|
||||
<div class="tags">
|
||||
<span class="tag is-info has-text-black is-large is-pulled-right">04.03.2026</span>
|
||||
<span class="tag is-success has-text-black is-large is-pulled-right">28 л</span>
|
||||
<span class="tag is-success has-text-black is-large is-pulled-right">С-р: 22%</span>
|
||||
<span class="tag is-light has-text-black is-large is-pulled-right">22.03.2026</span>
|
||||
</div>
|
||||
<div id="info2" class="is-hidden">
|
||||
<ul>
|
||||
<li>Объем сусла: </li>
|
||||
<li>Объем сока: </li>
|
||||
<li>Начальная масса добавленного меда: </li>
|
||||
<li>Начальная масса добавленной фруктозы: </li>
|
||||
<li>Начальная масса добавленной декстрозы: </li>
|
||||
<li>Начальная масса добавленных полисахаров: </li>
|
||||
<li>Сахаристость: </li>
|
||||
<li>Дата постановки на брожение: </li>
|
||||
<li>Дата снятия с осадка: </li>
|
||||
<li>Дата постановки на повторное брожение: </li>
|
||||
<li>Дата повторного снятия с осадка: </li>
|
||||
<li>Дата купажа: </li>
|
||||
<li>Масса добавления фруктозы: </li>
|
||||
<li>Дата добавления фруктозы: </li>
|
||||
<li>Масса добавления декстрозы: </li>
|
||||
<li>Дата добавления декстрозы: </li>
|
||||
<li>Масса добавления полисахаров: </li>
|
||||
<li>Дата добавления полисахаров: </li>
|
||||
</ul>
|
||||
{% end %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@ -15,16 +15,6 @@
|
||||
<!-- JQuery UI -->
|
||||
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
|
||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
||||
<style>
|
||||
/* Стили полей */
|
||||
label {margin-bottom: 0.5rem;}
|
||||
.field {margin-bottom: 1.5rem;}
|
||||
.select, .control.is-expanded {width: 100%;}
|
||||
button.delete {background-color: red !important; color: white !important;}
|
||||
|
||||
/* Ползунки */
|
||||
.slider-range {margin: 1rem 0;}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -57,10 +47,24 @@
|
||||
Мои чаны
|
||||
</p>
|
||||
<ul class="menu-list">
|
||||
<li><a href="/">Бродильные емкости</a></li>
|
||||
<li><a href="/users">Добавить новую</a></li>
|
||||
<li><a href="/config">Конфигурация</a></li>
|
||||
<li><a href="/">Активные чаны</a></li>
|
||||
<li><a href="/archive">Архивные чаны</a></li>
|
||||
</ul>
|
||||
<p class="menu-label">
|
||||
Бродильня
|
||||
</p>
|
||||
<ul class="menu-list">
|
||||
<li>
|
||||
<a href="/room"><span class="tag {{room.temp_status}} is-large"><i class="fa fa-thermometer-three-quarters fa-fw" aria-hidden="true"></i>{{room.temp}}</span></a>
|
||||
<a href="/room"><span class="tag {{room.warm_status}} is-large"><i class="fa fa-tint fa-fw" aria-hidden="true"></i>{{room.warm}}</span></a>
|
||||
</li>
|
||||
<p class="menu-label">
|
||||
Подвал
|
||||
</p>
|
||||
<li>
|
||||
<a href="/cellar"><span class="tag {{cellar.temp_status}} is-large"><i class="fa fa-thermometer-three-quarters fa-fw" aria-hidden="true"></i>{{cellar.temp}}</span></a>
|
||||
<a href="/cellar"><span class="tag {{cellar.warm_status}} is-large"><i class="fa fa-tint fa-fw" aria-hidden="true"></i>{{cellar.warm}}</span></a>
|
||||
</li>
|
||||
</nav>
|
||||
</aside>
|
||||
<main class="column main">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user