Hello my friends
I want to access "sent_bytes_length" of file which has been downloaded incompletely by user and send it to http://locahost:8080
My API is written by nodejs
I tried ngx.fetch and r.subrequest to handle it inside "custom access log function" by NJS but it does not allow me to use Promise function
Can you help me, please?
Thank you
nginx.config ---------------------------------------------------------------------------
js_import conf.d/download_log.js;
js_set $json_download_log download_log.downloadLog;
log_format download escape=none $json_download_log;
map $request_uri $loggable {
~/download/(.*) 1;
default 0;
}
server {
.
.
.
location /downloadlog {
proxy_pass http://localhost:10000;
}
location / {
access_log /var/log/nginx/download.log download if=$loggable;
proxy_pass http://localhost:10000;
}
}
download_log.js --------------------------------------------------------------------
export default { downloadLog };
function downloadLog(r) {
var connection = {
"serial": Number(r.variables.connection),
"request_count": Number(r.variables.connection_requests),
"elapsed_time": Number(r.variables.request_time)
}
if (r.variables.pipe == "p") {
connection.pipelined = true;
} else {
connection.pipelined = false;
}
if ( r.variables.ssl_protocol !== undefined ) {
connection.ssl = sslInfo(r);
}
var request = {
"client": r.variables.remote_addr,
"port": Number(r.variables.server_port),
"host": r.variables.host,
"method": r.method,
"uri": r.uri,
"http_version": Number(r.httpVersion),
"bytes_received": Number(r.variables.request_length)
};
request.headers = {};
for (var h in r.headersIn) {
request.headers[h] = r.headersIn[h];
}
var upstreams = [];
if ( r.variables.upstream_status !== undefined ) {
upstreams = upstreamArray(r);
}
var response = {
"status": Number(r.variables.status),
"bytes_sent": Number(r.variables.bytes_sent),
}
response.headers = {};
for (var h in r.headersOut) {
response.headers[h] = r.headersOut[h];
}
let LOG = JSON.stringify({
"timestamp": r.variables.time_iso8601,
"connection": connection,
"request": request,
"upstreams": upstreams,
"response": response
});
/******************************************************/
I want to send this LOG to http://localhost:8080
/******************************************************/
return LOG;
}
---------------------------------------------------------------------------------------------