Byla vydána první veřejná preview verze PrusaSliceru 3.0. Přesně 15 let po zveřejnění první verze Slic3ru, které připadlo na 1. září 2011. Jedná se o dosud největší upgrade PrusaSliceru: "Řídili jsme se tím, co skutečně potřebujete, a tak jsme například zcela zahodili stávající uživatelské rozhraní a vytvořili ho znovu od nuly. Přinášíme také nový systém projektů, kompletně přepracované profily navržené pro moderní tiskárny s větším
… více »Byl vydán Mozilla Firefox 155.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Vypíchnout lze Smart Window, zatím ale dostupné pouze pro uživatele v USA, Kanadě a Francii. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 155 bude brzy k dispozici také na Flathubu a Snapcraftu.
Tima Cooka na pozici generálního ředitele společnosti Apple dnešním dnem nahradil John Ternus, který byl dosud odpovědný za hardware. Tim Cook vedl Apple od roku 2011, kdy funkci převzal od později zesnulého spoluzakladatele společnosti Stevea Jobse. Za 15 let v čele Applu více než zdvojnásobil tržní hodnotu firmy.
Organizátoři konference LinuxDays ukončil veřejné přihlašování přednášek. Teď je na vás, abyste vybrali nejlepší témata pro letošní ročník. Hlasovat můžete do pondělí 7. září, poté bude podle výsledků hlasování sestaven program pro letošní ročník.
Servo, engine webového prohlížeče napsaný v Rustu, byl vydán ve verzi 0.5.0. Novinky shrnuje přehled projektu za červenec. Došlo k dalšímu pokroku ve vykreslování webových stránek. Současným cílem projektu je vytvořit komponentu webového prohlížeče jako WebView pro použití v jiných aplikacích.
IKEA a XBOX představují kolekci YXSTABY (pdf). Ta přináší designová a praktická řešení, díky nimž se prostor pro hraní během sekundy promění v útulný a harmonický domov.
Jonathan Thomas oznámil vydání verze 4.0 nelineární střižny OpenShot. Nově podporuje nahrávání obrazu a zvuku, vylepšuje uživatelské rozhraní, mj. color grading, přidává další efekty a mnoho dalšího (seznam změn).
Proběhlo hlasování o používání LLM při vývoji Debianu. Vývojáři Debianu si odhlasovali zodpovědné využívání generativní umělé inteligence.
Sovereign Tech Agency (Wikipedie) prostřednictvím svého fondu Sovereign Tech Fund podpoří vývoj Flatpaku částkou 508 640 eur.
Byla vydána první veřejná verze v7.0-mk2 projektu Multikernel (mklinux), který umožňuje spouštět více nezávislých linuxových jader současně na jednom stroji bez hypervizoru.
PRD, PDDI, STATUS
192.168.0.25, somestring, REGISTRATION SUCCESSFUL
our.domain.de, somestring, REGISTRATION FAILED
S takovýmhle polem bych už si pak snad dokázal poradit a napsat plugin, který by pro každý SIP Trunk vyhodnotil jeho stav a vrátil tuto hodnotu check_mk. Bohužel by mi to samotnému trvalo dost dlouho.
Dokázal by mně někdo nasměrovat k elegantnímu řešení? Díky!
https://192.168.3.200/services/webapp/monitor/sip_i.php?sip_i=regstatus
A tahá to jen několik js souborů:
sip_i.js
jquery.js
bootstrap.min.js
sorttable.js
jquery.quicksearch.js
Nás nejspíš zajímá sip_i.js:
var dataTable;
function init()
{
dataTable = document.getElementById("datatable");
var aCheckBoxes = document.getElementsByName("checkboxes");
dataTable.CheckBoxes = aCheckBoxes;
}
function selectAllRows(x)
{
var aCheckBoxes = dataTable.CheckBoxes;
var bChecked = false;
if(x.id == 'clearall' || x.id == 'checkall')
{
bChecked = (x.id == 'clearall') ? false : true;
}
var aRows = dataTable.tBodies[0].rows;
// nRows is the index of the last checkbox
// warning : remove the title line
var nRows = aRows.length-2;
for(var i=nRows;i>=0;i--)
{
aCheckBoxes[i].checked = bChecked;
}
}
function deleteSelected()
{
var aRows = dataTable.tBodies[0].rows;
var nRows = aRows.length-2;
var parm="";
var aCheckBoxes = dataTable.CheckBoxes;
for(var i=nRows;i>=0;i--)
{
if (aCheckBoxes[i].checked)
{
if (parm != "")
parm+=" "
parm+=aCheckBoxes[i].value;
}
}
document.getElementById("theParam").value = parm ;
document.getElementById("theForm").submit();
}
Já z toho bohužel nedokážu na první pohled vyčíst, jestli tam nějaké použitelné api je.
dataTable = document.getElementById("datatable");
Upravil jsem soubor sip_i.js, tak, že v něm zbylo pouze toto:
var dataTable;
function init()
{
dataTable = document.getElementById("datatable");
}
Uložil vše do overrides a stránka se posléze načetla v podstatě normálně a zobrazila i tabulku s informaci o SIP Trunku.
nóóóóóó vygenerovaná ne :O :O ;D ten řádeček kódu dělá že se v html dokumentu najde element co má parametr id nastavenej na 'datatable' a tan se uloží do proměný dataTable ;D
zisti z kterýho html souboru seto volá a tam si najdi tu tabluku a tu asi jako možná pude parsovat pythonem :O ;D
Díky, svatá Gréto! :) Jediný element s nějakým parametrem id je tento:
ífrejm width="100%" frameborder="0" src="./blank.html" name="content" id="content" onload="javascript:resizeIframe(this);"> ífrejm
A to bohužel není to co bysme potřebovali. Pak už jsem tam našel jen dvě tabulky s class="dataTable, ale to mi taky nepomůže. Kód stránky po načtení vypadá takto:
https://pastebin.com/X89nPLzy
Vidím tam, že se načte skript:
SRC="./js/sip_i.js"
A o kus níže se zavolá funkce init() z tohohle skriptu:
init();
Díky!
hhhmmmmm celý je to takový divný :O :'( to je celej ten sip_i.js co sems dával?? tam seasi jako jenom nějak čaruje s checkboxama :'( fakt ty data nenačítá nějakej php skript strčenej v místě tý tabulky v tom html dokumentu?? jestli mužeš tak sem hoď jak ten dokument z pastebin vypadá bez zapnutýho js třeba staženej wgetem
ještě sem dej možná tamto sorttable.js třeba to nedělá jenom řazení nevim
podezírám podobně pomenovanej skript sip_i.php že se někde asi bude volat ale jako hádám :'(
https://192.168.2.100/services/webapp/monitor/sip_i.php?sip_i=regstatus/
Tak dostanu stránku bez tabulky SIP Trunků. A tuhle chybu jsem přesně udělal v mám pythoním skriptu.
Pokud zmíněnou url zavolám bez lomítka na konci, tami mi curl, wget i python vrátí stránku s tabulkou. Takže celá hypotéza s javascriptem byla mylná. sigh
Tím se ovšem dostáváme k původní otázce, jak příslušnou tabulku, která může mít teoreticky neomezený počet řádek, rozsekat v pythonu do nějakého použitelného tvaru. Prakticky těch řádek moc nebude.
fakt si to jako dobře nakopíroval ten html kód?? tam tabulka neni uzavřená :O :O
todleto by ti mohlo fungovat i tak ;D
from bs4 import BeautifulSoup
import urllib3
http = urllib3.PoolManager()
url = 'https://192.168.2.100/services/webapp/monitor/sip_i.php?sip_i=regstatus'
response = http.request('GET', url)
soup = BeautifulSoup(response.data,"html.parser")
counter=0
#maj tam chybu tag table neni uzavřenej a nemužeme rozumě skákat po tabulkách fakt si to dobře nakopíroval?? :O :O
#proto sem šáhla po těch 'td'
counter=0
PRD="" # :D :D :D :D
PDDI=""
STATUS=""
rows=[]
#pro všechny td tagy v html až jako na ten poslední
#poslední je nějaká kravinka
for td in soup.find_all("td")[:-1]:
if counter==0:
PRD=td.find('b').text.split('-')[1].strip()
counter+=1
elif counter==1:
if not "Public DDI" in td.text:
raise IndexError('sem jako cekala na indexu 1 hodnotu Public DDI a mam tam '+td.text+'!!!! :O :O')
counter+=1
elif counter==2:
if not "STATUS" in td.text:
raise IndexError('sem jako cekala na indexu 2 hodnotu STATUS a mam tam '+td.text+'!!!! :O :O')
counter+=1
elif counter==3:
PDDI=td.text
counter+=1
elif counter==4:
STATUS=td.text.strip()
#udělali jsme kolečko jedný tabulky uložíme řádek napotom
counter=0
rows.append({'PRD': PRD,'PDDI': PDDI,'STATUS': STATUS})
else:
raise IndexError('jako neco je hoooooooooooooooodne spatne protoze index neni v intervalu 0-4!!!! :O :O')
for row in rows:
print("PRD: {PRD} PDDI: {PDDI} STATUS: {STATUS}".format(**row))
Tak po pár menší úpravách mi to funguje. Bylo potřeba přidat autentizaci a ignorovat chybu certifikátu. A split v prvním td bylo potřeba udělat pomocí mezery, protože string za pomlčkou může pomlčku obsahovat:
#!/usr/bin/env python3
# importing the libraries
import requests
from urllib3.exceptions import InsecureRequestWarning
from bs4 import BeautifulSoup
# Suppress only the single warning from urllib3 needed.
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
# Define variables
url = "https://192.168.2.100/services/webapp/monitor/sip_i.php?sip_i=regstatus"
user = 'user'
passwd = 'secret'
# Make a GET request to fetch the raw HTML content
response = requests.get(url, auth=(user, passwd), verify=False)
# Parse the html content
soup = BeautifulSoup(response.text, "html.parser")
counter=0
counter=0
PRD=""
PDDI=""
STATUS=""
rows=[]
for td in soup.find_all("td")[:-1]:
if counter==0:
PRD=td.find('b').text.split(' ')[4].strip()
counter+=1
elif counter==1:
if not "Public DDI" in td.text:
raise IndexError('Expected value "Public DDI" but got '+td.text+'')
counter+=1
elif counter==2:
if not "STATUS" in td.text:
raise IndexError('Expected value "STATUS" but got '+td.text+'')
counter+=1
elif counter==3:
PDDI=td.text
counter+=1
elif counter==4:
STATUS=td.text.strip()
# First table is ready. We save the row for next time.
counter=0
rows.append({'PRD': PRD,'PDDI': PDDI,'STATUS': STATUS})
else:
raise IndexError('Critical Error. Index is not within interval 0-4')
for row in rows:
print("PRD: {PRD} PDDI: {PDDI} STATUS: {STATUS}".format(**row))
Teď z toho ještě zbastlit check pro check_mk, ale s tim už si nějak poradim.
Díky všem.
mužeš udělat split jenom prvním výskytem znaku/stringu uplně jednoduše takhle text.split('-',1)
taky je dobrý nedělat takovýdle krkolomný jednořádkový šílenosti jakože td.find('b').text.split('-',1)[1].strip()protože každej z těch kroků muže selhat třeba to jako nenajde tag b a vrátí to None b nemusí mit text za pomlčkou už nic nemusí bejt a tak. lepšejší je to mit rozdělený na jednotlivý kroky a ty případný chyby hlídat jim moc nevěřim když neuměj ani uzavřit tabulku :O ;D joa že tam je proměná counter dvakrát to je samo že navíc stačí ho mit jenom jednou ;D
nóóó sem trošku čuňačila aby to jako bylo rychle hotový :O :O :D ;D
OXO Connect Rel. 3.2
cpu name: PowerCPU
Software: ONEDE032/039.001
Linux kernel: Linux version 2.6.29.6-rt23-030.001
O licencích jsem nic nenašel.
Nějaké API to určitě má, zkusim něco najít na jejich business portálu.
Bohužel moje dosavadní zkušenost s alcatelem by se dala popsat tak, že obchodní oddělení je mnohem lepší než oddělení vývoje. Můj čistě osobní dojem z jejich produktů je, že to je nepřehledný nepořádek.
#!/usr/bin/env python3
# importing the libraries
import sys, getopt
import requests
import re
from urllib3.exceptions import InsecureRequestWarning
from bs4 import BeautifulSoup
# Suppress only the single warning from urllib3 needed.
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
#def main (argv):
url = ''
user = ''
passwd = ''
hostname = ''
prd = ''
# Get full command-line arguments
full_cmd_arguments = sys.argv
# Keep all but the first
argument_list = full_cmd_arguments[1:]
short_options = "hu:p:H:P:"
long_options = ["username=","password=","hostname=","publicregistrationdomain"]
def usage():
print('check-sip-trunk.py -u <username> -p <password> -H <hostname> -P <publicregistrationdomain>')
try:
arguments, values = getopt.getopt(argument_list, short_options, long_options)
except getopt.GetoptError as err:
print (str(err))
usage()
sys.exit(2)
if not arguments:
usage()
sys.exit(2)
for opt, arg in arguments:
if opt == '-h':
usage()
sys.exit()
elif opt in ("-u", "--username"):
user = arg
elif opt in ("-p", "--password"):
passwd = arg
elif opt in ("-H", "--hostname"):
hostname = arg
url = f"https://{hostname}/services/webapp/monitor/sip_i.php?sip_i=regstatus"
elif opt in ("-P", "--publicregistrationdomain"):
prd = arg
# Make a GET request to fetch the raw HTML content
response = requests.get(url, auth=(user, passwd), verify=False)
# Parse the html content
soup = BeautifulSoup(response.text, "lxml")
counter=0
PRD=""
PDDI=""
STATUS=""
rows=[]
for td in soup.find_all("td")[:-1]:
if counter==0:
PRD=td.find('b')
if PRD is not None:
PRD=PRD.text.split('-',1)[1].strip()
counter+=1
else:
raise IndexError('Tag containing Public Registration Domain not found')
elif counter==1:
if not "Public DDI" in td.text:
raise IndexError('Expected value "Public DDI" but got '+td.text+'')
counter+=1
elif counter==2:
if not "STATUS" in td.text:
raise IndexError('Expected value "STATUS" but got '+td.text+'')
counter+=1
elif counter==3:
PDDI=td.text
counter+=1
elif counter==4:
STATUS=td.text.strip()
counter=0
if STATUS=="REGISTRATION SUCCESSFUL":
trunkstatus = "0 SIP-TRUNK - OK: Public Registration Domain - "+PRD+", Public DDI - "+PDDI+", Status - "+STATUS
rows.append(trunkstatus)
elif STATUS=="REGISTRATION FAILED":
trunkstatus = "2 SIP-TRUNK - CRITICAL: Public Registration Domain - "+PRD+", Public DDI - "+PDDI+", Status - "+STATUS
rows.append(trunkstatus)
else:
trunkstatus = "3 SIP-TRUNK - UNKNOWN: Public Registration Domain - "+PRD+", Public DDI - "+PDDI+", Status - "+STATUS
rows.append(trunkstatus)
else:
raise IndexError('Critical Error. Index is not within interval 0-4')
for item in rows:
if re.search(rf"\b{prd}\b",item):
print(item)
sys.exit()
else:
print("Public Registration Domain \""+prd+"\" does not exist.")
sys.exit(2)
Tiskni
Sdílej: