Adding custom metric
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
- issue の種類
- 機能追加
- 明瞭さ
- 説明が足りない
- 活発さ
- 停滞
- 技術スタック
- javascript, python
調査の方向性
まず serverinfo ページと既存のメトリクスのエントリポイントを見つけ、次に modem_signal.py を読んで、提案されている LTE 信号の入力と出力を理解します。このデータをページ上でどのように公開し、表示できるかを判断します。LTE モデムの信号強度を serverinfo メトリクスとして利用できるようになれば完了です。
索引モデルが issue の本文から書いたものです。
説明
Hi! I would like to add LTE modem signal strength to the available data (metrics) provided on the page serverinfo.
I have a Python function which gets this data from LTE modem which can be run as modem_signal.py http://192.168.0.1 and provides the output like Orange PL LTE ▂▃▄.
#!/usr/bin/env python3
"""
Display 4G/5G modem signal strength using vertical bars and show operator + access mode.
Example usage:
python3 modem_signal.py http://admin:[email protected]/
"""
from argparse import ArgumentParser
from huawei_lte_api.Connection import Connection
from huawei_lte_api.Client import Client
import re
SIGNAL_LEVELS = {
0: " ",
1: "▂ ",
2: "▂▃ ",
3: "▂▃▄ ",
4: "▂▃▄▅ ",
5: "▂▃▄▅▇"
}
def parse_dbm(value):
if value is None:
return None
match = re.search(r'-?\d+', str(value))
return int(match.group()) if match else None
def get_signal_level(rsrp: int) -> int:
if rsrp is None:
return 0
if rsrp >= -80:
return 5
elif rsrp >= -90:
return 4
elif rsrp >= -100:
return 3
elif rsrp >= -110:
return 2
elif rsrp >= -120:
return 1
else:
return 0
def generate_signal_bars(level: int, total: int = 5) -> str:
"""
Create a vertical bar chart (like a phone signal icon).
Each bar grows higher from left to right.
"""
result = []
for row in range(total, 0, -1):
line = ""
for col in range(1, total + 1):
if col <= level and row <= col:
line += "▇ "
else:
line += " "
result.append(line.rstrip())
return "\n".join(result)
def main():
parser = ArgumentParser()
parser.add_argument('url', type=str)
parser.add_argument('--username', type=str)
parser.add_argument('--password', type=str)
args = parser.parse_args()
with Connection(args.url, username=args.username, password=args.password) as connection:
client = Client(connection)
# Get signal and network info
signal_info = client.device.signal()
status_info = client.monitoring.status()
network_type_raw = str(status_info.get('CurrentNetworkType', '0'))
network_type_map = {
'0': 'No Service',
'1': 'GSM', '2': 'GPRS', '3': 'EDGE',
'4': 'WCDMA', '5': 'HSDPA', '6': 'HSUPA', '7': 'HSPA',
'8': 'TDSCDMA', '9': 'HSPA+',
'10': 'EVDO Rev.0', '11': 'EVDO Rev.A', '12': 'EVDO Rev.B',
'13': '1xRTT', '14': 'UMB', '15': '1xEVDV', '16': '3xRTT',
'17': 'HSPA+ 64QAM', '18': 'HSPA+ MIMO',
'19': 'LTE', '41': 'LTE CA',
'101': 'NR5G NSA', '102': 'NR5G SA'
}
plmn_info = client.net.current_plmn()
# Parse and determine values
rsrp = parse_dbm(signal_info.get('rsrp'))
rsrq = signal_info.get('rsrq')
sinr = signal_info.get('sinr')
level = get_signal_level(rsrp)
# bars = generate_signal_bars(level)
bars = SIGNAL_LEVELS[level]
operator_name = plmn_info.get('FullName') or plmn_info.get('ShortName') or "Unknown"
# Map internal mode codes (if any) to readable labels
mode_map = {
"LTE": "4G",
"WCDMA": "3G",
"GSM": "2G",
"NR5G": "5G",
"NR": "5G"
}
readable_mode = network_type_map.get(network_type_raw, f"Unknown ({network_type_raw})")
# Display
print(f"{operator_name} {readable_mode} {bars}")
# print(bars)
# print(f"\n RSRP: {signal_info.get('rsrp')}")
# if rsrq: print(f" RSRQ: {rsrq}")
# if sinr: print(f" SINR: {sinr}")
if __name__ == "__main__":
main()
What is the best way to embed it to the serverinfo page?
- 主要言語
- JavaScript
- スター
- 133
- フォーク
- 67
- 平均マージ
- 22時間 55分
- マージ済み PR(30日)
- 53
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
nextcloud/serverinfo のほかの issue
-
Database checks: `Select_full_join` warning is caused by the setup checks' own schema introspectionオープン
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
nextcloud/serverinfo#1245 ·
メンテナーはふだん 1 日以内に返信
-
Database checks: ∞% reported as Failing when counter is zero; no way to acknowledge/mute a checkオープン0. Needs triage bug
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
nextcloud/serverinfo#1231 ·
メンテナーはふだん 1 日以内に返信
-
0. Needs triage enhancement
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
nextcloud/serverinfo#1248 ·
メンテナーはふだん 1 日以内に返信
-
1. to develop bug
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
nextcloud/serverinfo#1224 · コメント 5 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
0. Needs triage bug
難易度 3/5 1〜2日 初心者へのやさしさ 55/100
nextcloud/serverinfo#1223 ·
メンテナーはふだん 1 日以内に返信
nextcloud/serverinfo の issue をすべて見る
似ている issue
-
enhancement javascript python
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
jlab-sensing/ENTS-backend#851 ·
メンテナーはふだん 2 日以内に返信
-
難易度 1/5 1〜3時間 初心者へのやさしさ 86/100
guilhermerodz/input-otp#157 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
davidjerleke/embla-carousel#1414 ·
メンテナーはふだん 4 日以内に返信
-
0. Needs triage bug
難易度 2/5 1〜3時間 初心者へのやさしさ 67/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信