Files
html/api/blade-power.php
2026-04-16 02:28:32 +02:00

50 lines
4.5 KiB
PHP

<?php
header("Content-Type: application/json");
$a=$_GET["action"]??"help";
$ws=[];foreach(file("/etc/weval/secrets.env")as $l){$l=trim($l);if(!$l||$l[0]==="#")continue;$p=strpos($l,"=");if($p!==false)$ws[substr($l,0,$p)]=substr($l,$p+1);}
switch($a){
case "providers":
$provs=["Groq"=>["https://api.groq.com/openai/v1/models","GROQ_KEY"],"Cerebras"=>["https://api.cerebras.ai/v1/models","CEREBRAS_API_KEY"],"Gemini"=>["https://generativelanguage.googleapis.com/v1beta/models?key=".($ws["GEMINI_KEY"]??""),""],"OpenRouter"=>["https://openrouter.ai/api/v1/models","OPENROUTER_KEY"],"Mistral"=>["https://api.mistral.ai/v1/models","MISTRAL_KEY"],"Together"=>["https://api.together.xyz/v1/models","TOGETHER_KEY"],"HuggingFace"=>["https://router.huggingface.co/v1/models","HF_TOKEN"],"NVIDIA"=>["https://integrate.api.nvidia.com/v1/models","NVIDIA_NIM_KEY"]];
$r=[];foreach($provs as $n=>[$url,$kn]){$key=$kn?($ws[$kn]??""):"";if(!$key&&$kn){$r[$n]=["status"=>"no_key"];continue;}$ch=curl_init($url);curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>1,CURLOPT_TIMEOUT=>8,CURLOPT_CONNECTTIMEOUT=>3]);if($key)curl_setopt($ch,CURLOPT_HTTPHEADER,["Authorization: Bearer $key"]);$resp=curl_exec($ch);$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);$time=round(curl_getinfo($ch,CURLINFO_TOTAL_TIME),2);curl_close($ch);$r[$n]=["status"=>$code==200?"up":"down","code"=>$code,"time"=>$time."s"];}
$ch=curl_init("http://127.0.0.1:11434/api/tags");curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>1,CURLOPT_TIMEOUT=>3]);$resp=curl_exec($ch);$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);$d=json_decode($resp,true);$r["Ollama_S204"]=["status"=>$code==200?"up":"down","models"=>count($d["models"]??[])];
echo json_encode(["providers"=>$r,"total"=>count($r),"up"=>count(array_filter($r,fn($x)=>($x["status"]??"")=="up"))]);break;
case "metrics":
$ch=curl_init("http://127.0.0.1:9191/api/v1/query?query=up");curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>1,CURLOPT_TIMEOUT=>5]);$resp=curl_exec($ch);curl_close($ch);$d=json_decode($resp,true);
$targets=[];foreach(($d["data"]["result"]??[])as $t){$targets[$t["metric"]["job"]]=(int)$t["value"][1];}
echo json_encode(["targets"=>$targets,"ts"=>date("c")]);break;
case "secrets":
$filled=0;$empty=0;$keys=[];foreach($ws as $k=>$v){if(strlen($v)>0){$filled++;$keys[$k]=strlen($v)."ch";}else{$empty++;$keys[$k]="EMPTY";}}
echo json_encode(["filled"=>$filled,"empty"=>$empty,"keys"=>$keys]);break;
case "blacklist":
$ip=$_GET["ip"]??"95.216.167.89";$rev=implode(".",array_reverse(explode(".",$ip)));
$bls=["b.barracudacentral.org","bl.spamcop.net","dnsbl.sorbs.net","dnsbl-1.uceprotect.net","psbl.surriel.com","all.s5h.net"];
$r=[];foreach($bls as $bl){$res=@dns_get_record("$rev.$bl",DNS_A);$r[$bl]=$res?"LISTED":"clean";}
echo json_encode(["ip"=>$ip,"results"=>$r,"listed"=>count(array_filter($r,fn($x)=>$x=="LISTED"))]);break;
case "cf_purge":
$zone=$ws["CF_ZONE_ID"]??"";$token=$ws["CF_API_TOKEN"]??"";$email=$ws["CF_EMAIL"]??"";
if(!$token){echo json_encode(["error"=>"no CF token"]);break;}
$ch=curl_init("https://api.cloudflare.com/client/v4/zones/$zone/purge_cache");
curl_setopt_array($ch,[CURLOPT_POST=>1,CURLOPT_POSTFIELDS=>'{"purge_everything":true}',CURLOPT_RETURNTRANSFER=>1,CURLOPT_HTTPHEADER=>["X-Auth-Email: $email","X-Auth-Key: $token","Content-Type: application/json"],CURLOPT_TIMEOUT=>10]);
echo curl_exec($ch);curl_close($ch);break;
case "logs":
$q=urlencode($_GET["q"]??"error");$limit=$_GET["limit"]??20;
$ch=curl_init("http://127.0.0.1:3102/loki/api/v1/query_range?query=%7Bjob%3D~%22.%2B%22%7D+%7C~+%22$q%22&limit=$limit&direction=backward");
curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>1,CURLOPT_TIMEOUT=>10]);$r=curl_exec($ch);curl_close($ch);
$d=json_decode($r,true);$lines=[];foreach(($d["data"]["result"]??[])as $s){foreach(($s["values"]??[])as $v){$lines[]=["ts"=>date("H:i:s",(int)($v[0]/1e9)),"msg"=>substr($v[1],0,200)];}}
echo json_encode(["query"=>$_GET["q"]??"error","count"=>count($lines),"lines"=>array_slice($lines,0,(int)$limit)]);break;
case "reboot_s95":
$ch=curl_init("https://api.hetzner.cloud/v1/servers/121486089/actions/reboot");
curl_setopt_array($ch,[CURLOPT_POST=>1,CURLOPT_RETURNTRANSFER=>1,CURLOPT_HTTPHEADER=>["Authorization: Bearer REDACTED_HETZNER","Content-Type: application/json"],CURLOPT_TIMEOUT=>15]);
echo curl_exec($ch);curl_close($ch);break;
default:
echo json_encode(["service"=>"Blade IA Power Pack","v"=>"1.0","actions"=>["providers","metrics","secrets","blacklist?ip=X","cf_purge","logs?q=error&limit=20","reboot_s95"]]);
}