feat(cloudron): add tirreno package artifacts

- Add CloudronStack/output/CloudronPackages-Artifacts/tirreno/ directory and its contents
- Includes package manifest, Dockerfile, source code, documentation, and build artifacts
- Add tirreno-1761840148.tar.gz as a build artifact
- Add tirreno-cloudron-package-1761841304.tar.gz as the Cloudron package
- Include all necessary files for the tirreno Cloudron package

This adds the complete tirreno Cloudron package artifacts to the repository.
This commit is contained in:
2025-10-30 11:43:06 -05:00
parent 0ce353ea9d
commit 91d52d2de5
1692 changed files with 202851 additions and 0 deletions

View File

@@ -0,0 +1,137 @@
import {Loader} from '../Loader.js?v=2';
import {BaseChart} from './BaseChart.js?v=2';
import {
COLOR_LIGHT_GREEN,
COLOR_GREEN,
X_AXIS_SERIFS,
} from '../utils/Constants.js?v=2';
export class BaseSparklineChart extends BaseChart {
constructor(chartParams) {
super(chartParams);
this.charts = null;
if (!this.loaders) {
this.loaders = [];
this.elems.forEach(el => {this.loaders[el] = new Loader();});
}
}
getOptions() {
const tooltipsPlugin = this.tooltipsPlugin({cursorMemo: this.cursorMemo}, 'day', '0');
return {
width: 200,
height: 30,
pxAlign: false,
cursor: {
show: false
},
select: {
show: false,
},
legend: {
show: false,
},
scales: {
x: {time: false},
},
axes: [
{show: false},
{show: false}
],
cursor: this.cursorMemo.get(),
plugins: [tooltipsPlugin],
series: [
{
label: 'Day',
scale: 'DAY',
value: '{YYYY}-{MM}-{DD}',
stroke: '#8180a0',
},
{
label: 'This week',
stroke: COLOR_GREEN,
fill: COLOR_LIGHT_GREEN,
points: {show: false}
},
{
label: 'Previous week',
stroke: 'rgba(129,128,160,0.7)',
fill: 'rgba(129,128,160,0.03)',
points: {show: false}
},
],
};
}
onChartLoaded(data, status, resolution) {
if ('success' == status) {
data = this.getData(data);
this.stopLoader();
this.charts = [];
this.elems.forEach(el => {
const lines = [data.time, data[el], data[el + 'Prev']];
this.charts.push(new uPlot(this.getOptions(), lines, this.getChartBlock(el)));
});
}
}
startLoader() {
if (!this.loaders) {
this.loaders = [];
this.elems.forEach(el => this.loaders[el] = new Loader());
}
this.elems.forEach(name => {
const el = document.createElement('p');
const block = this.getChartBlock(name);
block.classList.remove('is-hidden');
block.replaceChildren(el);
const p = block.querySelector('p');
this.loaders[name].start(p);
});
}
stopLoader() {
this.elems.forEach(el => {
this.loaders[el].stop();
this.getChartBlock(el).querySelector('p').classList.add('is-hidden');
});
}
getData(data) {
return {
'time': data[0],
'totalDevices': data[1],
'totalIps': data[2],
'totalSessions': data[3],
'totalEvents': data[4],
'totalDevicesPrev': data[5],
'totalIpsPrev': data[6],
'totalSessionsPrev': data[7],
'totalEventsPrev': data[8],
};
}
getChartBlock(cls) {
return document.querySelector(`td.${cls} p.session-stat`);
}
get chartBlocks() {
const result = {};
this.elems.forEach(el => {result[el] = this.getChartBlock(el);});
return result;
}
get elems() {
return ['totalDevices', 'totalIps', 'totalSessions', 'totalEvents'];
}
}