Bekijk Volledige Versie : Cacti/rrdtool installatie/configuratie/integratie icm whmcs
Ik ben op zoek naar iemand die cacti voor ons kan installeren, configureren en integreren met whmcs.
Cacti ervaring is een must, als je geen php expert bent en niet kan helpen met de integratie voor whmcs, dan is dit geen pobleem (dan doen we dat zelf wel).
Stuur een PB of een email.
Neem eens contact op met Spango, zij hebben het een en ander geintegreerd, waaronder overusage billing van Mbit's via whmcs/rrdtool. Zie ook http://forum.whmcs.com/showthread.php?t=17421
Spango Internet B.V.
04/03/09, 09:54
Bedankt voor het doorgeven Ron.
Bedankt voor het doorgeven Ron.
Hoi, ik heb ook gisteren een PM verstuurd via WHMCS forum, wil je hier nog even op reageren ?
The following modules are included in WHMCS + Cacti.
1) Cacti bandwidth management. We would like a module where we could add customer Cacti graphs (daily/weekly/monthly/yearly) to each dedicated/colo customer's profile.
2) Integrate the IMPI commands to power on, power off, reboot dedicated servers
3) Baytech and APC remote PDU management
4) Initiate server reloads with IMPI commands
Once this modules develope we will integrate the complete API with WHMCS.
Echter is de prijs: 1100 Dollar
Na 2 minuten onderhandelen was het al 900...
Dan zou dit met 30 dagen klaar zijn
IK weet niet wie hier nog meer interesse in hebben? Het zal WHMCS wel compleet maken!
@ Kevin: dit is via Spango of .... ?
Nee, ik was in gesprek op msn met Matt Chariot..
Maar deze addon zal behoorlijk wat meerwaarde hebben!
Alleen zou ik dit met een paar collega's willen doen. Lijkt me voor jullie ook een mooie aanvulling en dat drukt de prijs!
Maar Kevin, misschien een stomme vraag, maar als Spango precies hetzelfde wil delen voor bijvoorbeeld 200 dollar zie ik de toegevoegde waarde niet om Matt dat te laten maken eigenlijk ....
Dat klopt!
Zit hier ook APC bij? Misschien nog een idee om een start stop functie te maken voor streaming.
Denk dat het enkel de juiste SNMP OID's instellen is en dat het dus ook op APC moet werken. Ben laatst nog aan het stoeien geweest met die APC's met twee meetbanken (16 poorts en 32A stekker) om die uit te lezen in Cacti en de reboot via PHP te doen. De OID's waren nét wat anders dan bij de standaard. Maar als je die hebt, kun je alles. Dus denk wel dat ze die zo kunnen integreren als je ze de juiste waarden stuurt. Zeker nu is dat interessant, omdat je dan ook kunt betatesten, hetgeen straks op de prijs wer kan gaan schelen :)
Jah dat klopt randy, Maak jij ook gebruik van whmcs?
Spango Internet B.V.
04/03/09, 17:38
De systeem ondersteund de APC's van het merk APC en communiceert via SNMP.
Zijn er verder nog mensen die interesse hebben in dit systeem?
Justin
Daar heb ik wel interesse in ja, heb je hier een demo van?
Leuk en aardig script van Spango, maar als ze niet eens op hun mails reageren, dan durf ik ook geen zaken met hun te doen..
Ik heb een mail gestuurd samen met een klant van mij (Frank). Ik heb geen reactie van hun gehad, hij een keer, maar daarna niet meer. Niet echt veelbelovend dus..
Ik ben in gesprek gegaan met een php programmeur die dit voor een goede prijs kan schrijven, maar volgens hem moeten de snmp oid's afgesteld worden met whmcs voor een juiste koppeling van de poort nummers. Volgens hem moet dit dus met de hand gedaan worden, door wat tekstvakken in te vullen, en de module van Spango heeft zoals te zien in een screenshot op een andere forum hetzelfde. Ik was echter benieuwd of het niet op een automatische manier kan..
Maw, een bepaalde regelmaat checken binnen de OID's en deze vervolgens met de juiste poortnummers koppelen, zonder dat een admin dit moet doen. Scheelt tijd, saai werk en ook eventuele slordigheids- en typefouten.
Denk dat het enkel de juiste SNMP OID's instellen is en dat het dus ook op APC moet werken. Ben laatst nog aan het stoeien geweest met die APC's met twee meetbanken (16 poorts en 32A stekker) om die uit te lezen in Cacti en de reboot via PHP te doen. De OID's waren nét wat anders dan bij de standaard. Maar als je die hebt, kun je alles. Dus denk wel dat ze die zo kunnen integreren als je ze de juiste waarden stuurt. Zeker nu is dat interessant, omdat je dan ook kunt betatesten, hetgeen straks op de prijs wer kan gaan schelen :)
Heb jij niks geschreven Randy? :)
Ik zal binnenkort met een complete versie komen!
Voor zowel APC als Cacti
Zal de documentatie binnenkort posten
Spango Internet B.V.
06/03/09, 16:28
Beste,
Ik kom helaas bijna altijd tijd te kort, vandaar dat ik niet altijd direct post of reageer. De meer dringende zaken gaan voor.
Als er nog iemand een demo wil hebben van het systeem, stuur aub even een mail naar info @ spango . com
Alvast Bedankt,
Justin
Ik heb wel interesse, maar ipv whcms heb ik een oogje op wefact ;)
Wat zouden de voordelen zijn van Wefact Ipv Whmcs?
hier de clientareaproductdetails template voor de default vormgeving in whmcs.
cacti gedeelte is bijna klaar, hier wat we tot nu toe hebben gemaakt.
Werkt als volgt:
Voeg bij het product van de klant customfields toe, deze moeten 'apc' en 'cacti' heten.
Dan werk je de productgegevens van de klant bij, werkt als volgt: 172#eth0,174#eth1,185
Wat er gebeurt is dat er nu drie grafieken worden getoond, scheidingsteken tussen grafieken is dus een ', '. Achter elk grafieknummer kan je nu extra info schrijven, deze wordt dan gebruikt als naam voor de grafiek. Als extra info ontbreekt wordt nummer gebruikt als naam van de grafiek. Scheidingsteken is '#'.
Boven aan de productpagina ine ht klantgedeelte verschijnen de links naar de grafieken, hierbij wordt dus de naam van de grafiek getoond als deze er is, anders het nummer.
Grafieknummers zie je in Cacti, als je je muis over een link met graphinfo laat gaan zie je een ID, dat nummer voer je in in de backend van whmcs en je kan dus meerdere grafieken opnemen en zelfs extra info aan het grafieknummer meegeven.
Cacti moet een export doen naar een directory, bandwidth.php wordt speciaal gebruikt om te voorkomen dat een browser begint te zeuren dat 'het buiten het domein' valt. De Cacti export moet trouwens weer wel via een browser te vinden zijn.
We zijn er druk mee bezig, maar wilden alvast iets laten zien. Opmerkingen en wensen zijn altijd welkom.
Ton
{foreach from=$customfields key=k item=v}
<!--<li>{$k}: {$v}</li>-->
{foreach from=$v key=kk item=vv}
<!--<li>>{$kk}: {$vv}</li>-->
{if $kk EQ 'name'}
{if $vv EQ 'apc'}
{assign var=apc value= $v.value}
{/if}
{if $vv EQ 'cacti'}
{assign var=cacti value= $v.value}
{/if}
{/if}
{/foreach}
{/foreach}
<!--actiNum:{$cactiNum}/catiName:{$cactiName}-->
{if $apc}
<p class="heading2">Rebooten</p>
<table cellspacing="1" cellpadding="0" class="frame"><tr><td>
<table width="100%" cellpadding="2">
<tr><td width="150" class="fieldarea">apc switch:</td>
<td><select name="apc" size="1">
<option value="1" selected="selected">No Action </option>
<option value="2">On Immediate</option>
<option value="3">On Delayed</option>
<option value="4">Off Immediate</option>
<option value="5">Off Delayed</option>
<option value="6">Reboot Immediate</option>
<option value="7">Reboot Delayed</option>
<option value="8">Cancel Pending Commands</option>
</select>
</td></tr>
</table>
</table> {/if APC}
{if $cacti}
<p class="heading2">Bandwidth Graphs</p>
{assign var=cactiA value=","|explode:$cacti}
{foreach from=$cactiA key=k item=v}
{assign var=cactiTmp value="#"|explode:$v}
{assign var=cactiNum value=$cactiTmp.0}
{assign var=cactiName value=$cactiTmp.1}
{*<br/>cactiNum:{$cactiNum}/cactiName:{$cactiName}/cactiTmp:{$cactiTmp}*}
<br/><a href="{$smarty.server.PHP_SELF}?action={$smarty.get.acti on}#{$cactiNum}">{$cactiName|default:$cactiNum} bandwidth</a>
{/foreach}
{/if}
{debug}
<p class="heading2">{$LANG.clientareaproductdetails}</p>
<table cellspacing="1" cellpadding="0" class="frame"><tr><td>
<table width="100%" cellpadding="2">
<tr><td width="150" class="fieldarea">{$LANG.clientareahostingregdate}:</td><td>{$regdate}</td></tr>
<tr><td class="fieldarea">{$LANG.orderproduct}:</td><td>{$groupname} - {$product}</td></tr>
<tr><td class="fieldarea">{$LANG.clientareahostingdomain}:</td><td>{if $domain eq ""}-{else}<a href="http://{$domain}" target="_blank">{$domain}</a>{/if}</td></tr>
{foreach key=num item=configoption from=$configoptions}
<tr><td class="fieldarea">{$configoption.optionname}:</td><td>{if $configoption.optiontype eq 3}{if $configoption.selectedqty}{$LANG.yes}{else}{$LANG. no}{/if}{elseif $configoption.optiontype eq 4}{$configoption.selectedqty} x {$configoption.selectedoption}{else}{$configoption .selectedoption}{/if}</td></tr>
{/foreach}
<tr><td class="fieldarea">{$LANG.orderpaymentmethod}:</td><td>{$paymentmethod}</td></tr>
<tr><td class="fieldarea">{$LANG.firstpaymentamount}:</td><td>{$currencysymbol}{$firstpaymentamount} {$currency}</td></tr>
<tr><td class="fieldarea">{$LANG.recurringamount}:</td><td>{$currencysymbol}{$recurringamount} {$currency}</td></tr>
<tr><td class="fieldarea">{$LANG.clientareahostingnextduedate}:</td><td>{$nextduedate}</td></tr>
<tr><td class="fieldarea">{$LANG.orderbillingcycle}:</td><td>{$billingcycle}</td></tr>
<tr><td class="fieldarea">{$LANG.clientareastatus}:</td><td>{$status}</td></tr>
{if $lastupdate}
<tr><td class="fieldarea">{$LANG.clientareadiskusage}:</td><td>{$diskusage} MB</td></tr>
<tr><td class="fieldarea">{$LANG.clientareadisklimit}:</td><td>{$disklimit} MB {if $diskpercent}<strong>({$diskpercent} {$LANG.clientareaused})</strong>{/if}</td></tr>
<tr><td class="fieldarea">{$LANG.clientareabwusage}:</td><td>{$bwusage} MB</td></tr>
<tr><td class="fieldarea">{$LANG.clientareabwlimit}:</td><td>{$bwlimit} MB {if $bwpercent}<strong>({$bwpercent} {$LANG.clientareaused})</strong>{/if}</td></tr>
{/if}
</table>
</td></tr></table>
<br />
{if $cacti}
{foreach from=$cactiA key=k item=v}
{assign var=cactiTmp value="#"|explode:$v}
{assign var=cactiNum value=$cactiTmp.0}
{assign var=cactiName value=$cactiTmp.1}
<p class="heading2"><a name="{$cactiNum}">Bandwidth Graphs {$cactiName|default:$cactiNum}</p>
<table border="0" cellpadding="0" cellspacing="5" class="frame">
<tr>
<td nowrap class="fieldarea">Daily Graph<br>(5 Min): </td>
<td><div align="center"><img src="/bandwidth.php?id={$cactiNum}&which=1"/></div></td>
</tr>
<tr>
<td nowrap class="fieldarea">Weekly Graph<br>(30 Min): </td>
<td><div align="center"><img src="/bandwidth.php?id={$cactiNum}&which=2"/></div></td>
</tr>
<tr>
<td nowrap class="fieldarea">Monthly Graph<br>(2 Hour): </td>
<td><div align="center"><img src="/bandwidth.php?id={$cactiNum}&which=3" /></div></td>
</tr>
<tr>
<td nowrap class="fieldarea">Yearly Graph<br>(1 Day): </td>
<td><div align="center"><img src="/bandwidth.php?id={$cactiNum}&which=4" /></div></td>
</tr>
</table>
<br/>
{/foreach}
{/if}{*cacti*}
<table align="center">
<tr>
<td>{if $packagesupgrade}
<form method="post" action="upgrade.php">
<input type="hidden" name="id" value="{$id}" />
<input type="hidden" name="type" value="package" />
<p><input type="submit" value="{$LANG.upgradedowngradepackage}" class="button" /></p>
</form>
{/if}</td>
<td>{if $configoptionsupgrade}
<form method="post" action="upgrade.php">
<input type="hidden" name="id" value="{$id}" />
<input type="hidden" name="type" value="configoptions" />
<p><input type="submit" value="{$LANG.upgradedowngradeconfigoptions}" class="button" /></p>
</form>
{/if}</td>
</tr>
</table>
{if $username}
<p><strong> » {$LANG.serverlogindetails}</strong></p>
<table cellspacing="1" cellpadding="0" class="frame"><tr><td>
<table width="100%" cellpadding="2">
<tr><td width="100" class="fieldarea">{$LANG.serverusername}:</td><td>{$username}</td></tr>
<tr><td class="fieldarea">{$LANG.serverpassword}:</td><td>{$password}</td></tr>
</table>
</td><td width="50%" align="center">
{$serverclientarea}
</td></tr></table>
{if $serverchangepassword}
<form method="post" action="{$smarty.server.PHP_SELF}?action=productdetails">
<input type="hidden" name="id" value="{$id}" />
<input type="hidden" name="serverchangepassword" value="true" />
<p><strong> » {$LANG.serverchangepassword}</strong></p>
{if $serverchangepasswordmessage}
<div class="errorbox">{$serverchangepasswordmessage}</div><br />
{/if}
<table cellspacing="1" cellpadding="0" class="frame"><tr><td>
<table width="100%" cellpadding="2">
<tr><td width="150" class="fieldarea">{$LANG.serverchangepasswordenter}:</td><td><input type="password" name="newserverpassword1" size="20" /></td></tr>
<tr><td class="fieldarea">{$LANG.serverchangepasswordconfirm}:</td><td><input type="password" name="newserverpassword2" size="20" /></td></tr>
</table>
</td></tr></table>
<p align="center"><input type="submit" value="{$LANG.serverchangepasswordupdate}" class="button" /></p>
</form>
{/if}
{/if}
{if $downloads}
<p><strong> » {$LANG.downloadstitle}</strong></p>
{foreach key=num item=download from=$downloads}
<table cellspacing="1" cellpadding="0" class="frame"><tr><td>
<table width="100%" cellpadding="2">
<tr><td width="150" class="fieldarea">Download:</td><td>{$download.type} <a href="{$download.link}">{$download.title}</a></td></tr>
<tr><td class="fieldarea">Description:</td><td>{$download.description}</td></tr>
</table>
</td></tr></table><br />
{/foreach}
{/if}
<p><strong> » {$LANG.clientareaaccountaddons}</strong>{if $addonsavailable} - <a href="cart.php?gid=addons&pid={$id}">{$LANG.orderavailableaddons}</a>{/if}</p>
<table class="clientareatable" cellspacing="1" align="center">
<tr class="clientareatableheading"><td>{$LANG.clientareaaddon}</td><td>{$LANG.clientareaaddonpricing}</td><td>{$LANG.clientareahostingnextduedate}</td></tr>
{foreach key=num item=addon from=$addons}
<tr class="{$addon.class}"><td>{$addon.name}</td><td align="center">{$addon.pricing}</td><td align="center">{$addon.nextduedate}</td></tr>
{foreachelse}
<tr class="clientareatableactive"><td colspan="3">{$LANG.clientareanoaddons}</td></tr>
{/foreach}
</table>
<br />
<table align="center"><tr><td width="10" align="right"><table style="width:10px;height:10px;" cellspacing="1" class="clientareatable"><tr class="clientareatableactive"><td></td></tr></table></td><td>{$LANG.clientareaactive}</td><td width="10" align="right"><table style="width:10px;height:10px;" cellspacing="1" class="clientareatable"><tr class="clientareatablepending"><td></td></tr></table></td><td>{$LANG.clientareapending}</td><td width="10" align="right"><table style="width:10px;height:10px;" cellspacing="1" class="clientareatable"><tr class="clientareatablesuspended"><td></td></tr></table></td><td>{$LANG.clientareasuspended}</td><td width="10" align="right"><table style="width:10px;height:10px;" cellspacing="1" class="clientareatable"><tr class="clientareatableterminated"><td></td></tr></table></td><td>{$LANG.clientareaterminated}</td></tr></table>
<br />
<table align="center">
<tr>
<td align="center"><input type="button" value="{$LANG.clientareabacklink}" onclick="window.location='clientarea.php?action=products'" class="button" /></td>
<td align="center">{if $showcancelbutton}<input type="button" value="{$LANG.clientareacancelrequestbutton}" onclick="window.location='clientarea.php?action=cancel&id={ $id}'" class="button" />{/if}</td>
</tr>
</table>
Is iemand hier nog verder mee gegaan ?
Groet,
Emiel
Inderdaad, ben er ook benieuwd na. Heb tevens even Justin van Spango gemaild!