Compare commits

...

2 Commits

Author SHA1 Message Date
Adrien W b56a9f5940 added a planned intervention on 24-08-21
1 year ago
Adrien W b95f14567a added finances page
2 years ago

@ -8,6 +8,7 @@ RewriteRule ^services$ /services.php [L]
RewriteRule ^mentionslegales$ /mentionslegales.php [L]
RewriteRule ^transparence$ /transparence.php [L]
RewriteRule ^faq$ /faq.php [L]
RewriteRule ^finances$ /finances.php [L]
## nginx rules
#location /cgu {

File diff suppressed because one or more lines are too long

@ -0,0 +1,307 @@
<?php
require_once 'includes/_config.php';
$currentPage = $pages['finances'];
?><!DOCTYPE html>
<html lang="fr">
<head>
<?php include 'includes/_meta.php'; ?>
<meta name="description" content="clawd.fr Hébergeur engagé et transparent" />
<link rel="canonical" href="https://clawd.fr/finance" />
<title>clawd.fr - Hébergeur engagé et transparent</title>
<?php include 'includes/_assets.php'; ?>
<script src="dist/library/echarts.custom.1.min.js"></script>
</head>
<body class="clawd">
<?php include 'includes/_menus.php'; ?>
<!-- Page Contents -->
<div class="pusher">
<div class="ui inverted vertical masthead center aligned segment">
<?php include 'includes/_mainmenu.php'; ?>
<div class="ui text container">
<h1 class="ui header clawdlogo">CLAWD.FR</h1>
<h2>HÉBERGEUR ENGAGÉ</h2>
</div>
</div>
<div class="ui container borderless center aligned">
<h1>FINANCES</h1>
<h4>C.A. par produit et bénéfices</h4>
<p>Voici dans le détail le chiffre d'affaires mensuel de chaque produit depuis le début de l'activité.<br>Le bénéfice net mensuel correspond au C.A. brut minoré des charges sociales (URSSAF: 22.2%) et fixes (serveur principalement: 121€/mois).</p>
</div>
<a name="recettes"></a>
<div class="ui vertical stripe segment">
<div class="ui top aligned container">
<div class="row">
<div class="wide column">
<div id="recettes" style="width: 1000px; height: 600px;"></div>
</div>
</div>
</div>
</div>
<div class="ui container borderless center aligned">
<h4>Répartition tarif libre</h4>
<p></p>
</div>
<a name="recettes"></a>
<div class="ui vertical stripe segment">
<div class="ui top aligned container">
<div class="row">
<div class="wide column">
<div id="tarifs" style="width: 1000px; height: 600px;"></div>
</div>
</div>
</div>
</div>
<?php include 'includes/_footer.php'; ?>
</div>
<?php include 'includes/_assetsLate.php'; ?>
<script type="text/javascript">
var recettesDom = document.getElementById('recettes');
var recettesChart = echarts.init(recettesDom);
var recettesOption;
recettesOption = {
title: {
// text: 'C.A. par produit'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
data: ['Total', 'VPS', 'Nextcloud', 'Web', 'Autres', 'E-mail', 'Dédié', 'Bénéfice net', 'Bénéfice cumulé'],
selected: {
'Total': true,
'Nextcloud': true,
'Web': true,
'E-mail': true,
'VPS': true,
'Dédié': true,
'Autres': true,
'Bénéfice net': true,
'Bénéfice cumulé': false,
}
},
toolbox: {
feature: {
saveAsImage: {}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: ['Septembre 2021', 'Octobre 2021', 'Novembre 2021', 'Décembre 2021', 'Janvier 2022', 'Février 2022', 'Mars 2022', 'Avril 2022', 'Mai 2022', 'Juin 2022', 'Juillet 2022', 'Août 2022', 'Septembre 2022', 'Octobre 2022', 'Novembre 2022', 'Décembre 2022', 'Janvier 2023', 'Février 2023', 'Mars 2023', 'Avril 2023', 'Mai 2023', 'Juin 2023', 'Juillet 2023', 'Août 2023']
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: 'Total',
type: 'line',
label: {
show: true,
position: 'top'
},
areaStyle: {},
emphasis: {
focus: 'series'
},
data: [24,24,24,54,54,179,183,183,187,187,211,256,259,259,297,297,301,304,308,314,298,402,411,387]
},
{
name: 'VPS',
type: 'line',
stack: 'Total',
areaStyle: {},
emphasis: {
focus: 'series'
},
data: [24,24,24,24,24,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,105]
},
{
name: 'Nextcloud',
type: 'line',
stack: 'Total',
areaStyle: {},
emphasis: {
focus: 'series'
},
data: [0,0,0,30,30,50,50,50,50,50,74,74,77,77,91,91,95,95,95,95,79,79,78,78]
},
{
name: 'Web',
type: 'line',
stack: 'Total',
areaStyle: {},
emphasis: {
focus: 'series'
},
data: [0,0,0,0,0,0,4,4,8,8,8,18,18,18,34,34,34,34,38,42,42,42,45,45]
},
{
name: 'Autres',
type: 'line',
stack: 'Total',
// label: {
// show: true,
// position: 'top'
// },
areaStyle: {},
emphasis: {
focus: 'series'
},
data: [0,0,0,0,0,0,0,0,0,0,0,35,35,35,35,35,35,35,35,35,35,35,35,35]
},
{
name: 'E-mail',
type: 'line',
stack: 'Total',
areaStyle: {},
emphasis: {
focus: 'series'
},
data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,11,11,13,13,13,20,20]
},
{
name: 'Dédié',
type: 'line',
stack: 'Total',
// label: {
// show: true,
// position: 'top'
// },
areaStyle: {},
emphasis: {
focus: 'series'
},
data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,104,104]
},
{
name: 'Bénéfice net',
type: 'line',
smooth: true,
// stack: 'Total',
// label: {
// show: true,
// position: 'top'
// },
areaStyle: {
opacity: 0
},
emphasis: {
focus: 'series'
},
data: [-102,-102,-102,-79,-79,17,20,20,24,24,42,77,80,80,109,109,112,115,118,122,110,191,198,179]
},
{
name: 'Bénéfice cumulé',
type: 'line',
smooth: true,
// stack: 'Total',
// label: {
// show: true,
// position: 'top'
// },
areaStyle: {
opacity: 0
},
emphasis: {
focus: 'series'
},
data: [-102,-205,-308,-387,-466,-449,-428,-407,-383,-358,-316,-238,-158,-78,31,141,253,368,487,610,720,911,1110,1289]
}
]
};
recettesOption && recettesChart.setOption(recettesOption);
var tarifsDom = document.getElementById('tarifs');
var tarifsChart = echarts.init(tarifsDom);
var tarifsOption;
tarifsOption = {
tooltip: {
trigger: 'item'
},
legend: {
top: '5%',
left: 'center',
// doesn't perfectly work with our tricks, disable it
selectedMode: false
},
series: [
{
name: 'Tarif choisi',
type: 'pie',
radius: ['40%', '70%'],
center: ['50%', '70%'],
// adjust the start angle
startAngle: 180,
label: {
show: true,
formatter(param) {
// correct the percentage
return param.name + ' (' + param.percent * 2 + '%)';
}
},
data: [
{ value: 3, name: 'minimum' },
{ value: 10, name: 'correct' },
{ value: 3, name: 'généreux' },
{ value: 0, name: 'maximum' },
{
// make an record to fill the bottom 50%
value: 16,
itemStyle: {
// stop the chart from rendering this piece
color: 'none',
decal: {
symbol: 'none'
}
},
label: {
show: false
}
}
]
}
]
};
tarifsOption && tarifsChart.setOption(tarifsOption);
</script>
</body>
</html>

@ -50,6 +50,11 @@ $pages = Array(
'key' => 'transparence',
'name' => 'Transparence',
'desc' => 'Découvrir mon activité en détails',
),
'finances' => Array(
'key' => 'finances',
'name' => 'Finances',
'desc' => 'fric = pognon',
)
);
@ -63,15 +68,23 @@ $mainMenu = [
$currentPage = $pages['index'];
/**
* Generate a link to a specified local page
*
* @param array $p details of the page to link to, either referring to $pages or provided
* @param array $override optional override options, same format as $p
* @return string HTML <a> element
*/
function pageLink(Array $p, Array $override=[]) {
global $currentPage;
if (!empty($override)) $p = array_replace($p, $override);
$active = $currentPage==$p? 'active ': '';
$css = ($currentPage==$p)? ['active', 'item']: ['item'];
$anchor = isset($p['anchor'])? '#'.$p['anchor']: '';
$key = $p['key']=='index'? '': $p['key'];
$url = '/'.$key.$anchor;
return '<a class="'.$active.'item" href="'.$url.'" target="_self" title="'.$p['desc'].'">'.$p['name'].'</a>';
return '<a class="'.implode(' ', $css).'" href="'.$url.'" target="_self" title="'.$p['desc'].'">'.$p['name'].'</a>';
}

@ -37,30 +37,30 @@ $currentPage = $pages['interventions'];
<div class="ui text container">
<h2>Incidents en cours, interventions planifiées ou en cours</h2>
<p>Aucun incident en cours. Dernier incident le <a href="#incident-221127">27 Novembre 2022</a>.</p>
<p>Aucune intervention planifiée. Dernière intervention le <a href="#interv-221212">12 Décembre 2022</a>.</p>
<!-- <p>Prochaine intervention planifiée le <a href="#interv-221212">12 Décembre 2022</a>.</p>-->
<!-- <p>Aucune intervention planifiée. Dernière intervention le <a href="#interv-221212">12 Décembre 2022</a>.</p>-->
<p>Prochaine intervention planifiée le <a href="#interv-240821">21 Août 2024</a>.</p>
</div>
</div>
<!-- <div class="ui vertical stripe segment interventions">-->
<!-- <div class="ui text container">-->
<!-- <h2>Interventions planifiées</h2>-->
<!---->
<!-- <a name="interv-221212"></a>-->
<!-- <div class="ui raised segment">-->
<!-- <div class="ui clearing basic segment">-->
<!-- <h4 class="ui left floated header">Intervention sur le serveur de mail</h4>-->
<!-- <h4 class="ui right floated header dimmed">le 12/12/2022</h4>-->
<!-- </div>-->
<!-- <div class="ui basic segment">-->
<!-- <h4 class="ui header impact-important">Impact: interruption planifiée des services de mail pendant moins d'une heure</h4>-->
<div class="ui vertical stripe segment interventions">
<div class="ui text container">
<h2>Interventions planifiées</h2>
<a name="interv-240821"></a>
<div class="ui raised segment">
<div class="ui clearing basic segment">
<h4 class="ui left floated header">Mise à jour de l'hyperviseur</h4>
<h4 class="ui right floated header dimmed">le 21/08/2024</h4>
</div>
<div class="ui basic segment">
<h4 class="ui header impact-important">Impact: interruption planifiée des services</h4>
<!-- <p><strong>Intervention terminée</strong></p>-->
<!-- <p>Une intervention sur l'infrastructure est planifiée pour ce lundi 12 Décembre 2022, elle commencera à 23h et devrait durer moins d'une heure. Le but de cette intervention est de corriger l'origine de l'incident du <a href="#incident-221127">dimanche 27 Octobre</a> qui a impacté les services de mail.<br>Cette intervention demandera l'interrption des services de mail (IMAP, SMTP, webmail) pendant toute sa durée, mais n'impactera aucun autre service.</p>-->
<!-- </div>-->
<!-- </div>-->
<!---->
<!-- </div>-->
<!-- </div>-->
<p>Une intervention sur l'infrastructure est planifiée pour mercredi 21 août 2024, la fenêtre d'intervention commence à 20h et se termine à minuit. Le but de cette intervention est de procéder à plusieurs mises à jour importantes sur l'hyperviseur: le système hôte de l'infrastructure virtualisée. Les services hébergés seront interrompus potentiellement plusieurs fois pendant la fenêtre d'intervention pour une durée cumulée estimée d'une heure ou moins.</p>
</div>
</div>
</div>
</div>
<div class="ui vertical stripe segment interventions">
<div class="ui text container">

@ -87,12 +87,12 @@ $currentPage = $pages['transparence'];
<div class="height wide column">
<h3>Locations et licences</h3>
<ul class="list">
<li>Serveur: 140€/mois</li>
<li>Serveur: ~100€/mois</li>
<li>Licence Proxmox "Community": 90€/an</li>
<li>Noms de domaine (clawd.fr & clawd.net): 30€/an</li>
<li>Stockage des sauvegardes: 2TB ~128€/an; ~4.27€/TB/mois au delà</li>
</ul>
<p>Total environ 1930€ par an soit ~160€/mois</p>
<p>Total environ 1930€ par an soit ~120€/mois</p>
<p>Pour résumer, si la totalité des 20TB étaient tous loués pour 60€ par TB et par mois, je ferais un bénéfice mensuel net d'environ 770€. Pas de quoi s'affoler, mais bien assez pour attaquer <a href="#objectifs" target="_self" title="Objectifs à moyen et long terme">la suite du plan</a>!</p>
</div>
<div class="height wide column">

Loading…
Cancel
Save