晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/lib/python3.9/site-packages/glances/plugins/sensors/ |
| Current File : //lib/python3.9/site-packages/glances/plugins/sensors/glances_hddtemp.py |
# -*- coding: utf-8 -*-
#
# This file is part of Glances.
#
# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com>
#
# SPDX-License-Identifier: LGPL-3.0-only
#
"""HDD temperature plugin."""
import os
import socket
from glances.compat import nativestr, range
from glances.logger import logger
from glances.plugins.glances_plugin import GlancesPlugin
class Plugin(GlancesPlugin):
"""Glances HDD temperature sensors plugin.
stats is a list
"""
def __init__(self, args=None, config=None):
"""Init the plugin."""
super(Plugin, self).__init__(args=args, config=config, stats_init_value=[])
# Init the sensor class
hddtemp_host = self.get_conf_value("host", default=["127.0.0.1"])[0]
hddtemp_port = int(self.get_conf_value("port", default="7634"))
self.hddtemp = GlancesGrabHDDTemp(args=args, host=hddtemp_host, port=hddtemp_port)
# We do not want to display the stat in a dedicated area
# The HDD temp is displayed within the sensors plugin
self.display_curse = False
# @GlancesPlugin._check_decorator
@GlancesPlugin._log_result_decorator
def update(self):
"""Update HDD stats using the input method."""
# Init new stats
stats = self.get_init_value()
if self.input_method == 'local':
# Update stats using the standard system lib
stats = self.hddtemp.get()
else:
# Update stats using SNMP
# Not available for the moment
pass
# Update the stats
self.stats = stats
return self.stats
class GlancesGrabHDDTemp(object):
"""Get hddtemp stats using a socket connection."""
def __init__(self, host='127.0.0.1', port=7634, args=None):
"""Init hddtemp stats."""
self.args = args
self.host = host
self.port = port
self.cache = ""
self.reset()
def reset(self):
"""Reset/init the stats."""
self.hddtemp_list = []
def __update__(self):
"""Update the stats."""
# Reset the list
self.reset()
# Fetch the data
# data = ("|/dev/sda|WDC WD2500JS-75MHB0|44|C|"
# "|/dev/sdb|WDC WD2500JS-75MHB0|35|C|"
# "|/dev/sdc|WDC WD3200AAKS-75B3A0|45|C|"
# "|/dev/sdd|WDC WD3200AAKS-75B3A0|45|C|"
# "|/dev/sde|WDC WD3200AAKS-75B3A0|43|C|"
# "|/dev/sdf|???|ERR|*|"
# "|/dev/sdg|HGST HTS541010A9E680|SLP|*|"
# "|/dev/sdh|HGST HTS541010A9E680|UNK|*|")
data = self.fetch()
# Exit if no data
if data == "":
return
# Safety check to avoid malformed data
# Considering the size of "|/dev/sda||0||" as the minimum
if len(data) < 14:
data = self.cache if len(self.cache) > 0 else self.fetch()
self.cache = data
try:
fields = data.split(b'|')
except TypeError:
fields = ""
devices = (len(fields) - 1) // 5
for item in range(devices):
offset = item * 5
hddtemp_current = {}
device = os.path.basename(nativestr(fields[offset + 1]))
temperature = fields[offset + 3]
unit = nativestr(fields[offset + 4])
hddtemp_current['label'] = device
try:
hddtemp_current['value'] = float(temperature)
except ValueError:
# Temperature could be 'ERR', 'SLP' or 'UNK' (see issue #824)
# Improper bytes/unicode in glances_hddtemp.py (see issue #887)
hddtemp_current['value'] = nativestr(temperature)
hddtemp_current['unit'] = unit
self.hddtemp_list.append(hddtemp_current)
def fetch(self):
"""Fetch the data from hddtemp daemon."""
# Taking care of sudden deaths/stops of hddtemp daemon
try:
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sck.connect((self.host, self.port))
data = b''
while True:
received = sck.recv(4096)
if not received:
break
data += received
except Exception as e:
logger.debug("Cannot connect to an HDDtemp server ({}:{} => {})".format(self.host, self.port, e))
logger.debug("Disable the HDDtemp module. Use the --disable-hddtemp to hide the previous message.")
if self.args is not None:
self.args.disable_hddtemp = True
data = ""
finally:
sck.close()
if data != "":
logger.debug("Received data from the HDDtemp server: {}".format(data))
return data
def get(self):
"""Get HDDs list."""
self.__update__()
return self.hddtemp_list
|