Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding:utf-8 -*-
- # !/usr/bin/env python3
- '''
- Author: ayasakinagi
- Email: xyz.wang@outlook.com
- 环境: Python3
- 依赖: deluge_client
- 使用: 修改host, port, username, password, limitSize, dataPath变量
- '''
- import os
- import time
- import logging
- from deluge_client import DelugeRPCClient
- # 主机地址
- host = '127.0.0.1'
- # deluge端口
- port = 58846
- # deluge 管理用户名,可在~/.config/deluge/auth找到
- username = ''
- # deluge密码,非webUI密码
- password = ''
- # 限制deluge data目录大小, 默认为1TB
- limitSize = 1000000000000
- # deluge data目录
- dataPath = '/media/sdad1/littleya/private/deluge/data/'
- logPath = '/tmp/delugeDelete.log'
- # init log
- handler1 = logging.FileHandler(logPath)
- handler2 = logging.StreamHandler()
- fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(message)s'
- formatter = logging.Formatter(fmt)
- handler1.setFormatter(formatter)
- handler2.setFormatter(formatter)
- logger = logging.getLogger('log')
- logger.addHandler(handler1)
- logger.addHandler(handler2)
- logger.setLevel(logging.DEBUG)
- def main():
- client = DelugeRPCClient(host, port, username, password)
- client.connect()
- # get torrent's status
- resList = []
- if client.connected:
- torrentList = client.call('core.get_session_state')
- for i in torrentList:
- torrentStatus = client.call('core.get_torrent_status', i, ['is_finished', 'total_size', 'total_peers', 'peers'])
- if not torrentStatus[b'is_finished']:
- continue
- elif torrentStatus[b'total_peers'] == 0 or len(torrentStatus[b'peers']) == 0:
- total_speed = 0
- else:
- total_speed = 0
- for j in torrentStatus[b'peers']:
- total_speed += j[b'up_speed']
- resList.append([bytes.decode(i), total_speed, torrentStatus[b'is_finished'], torrentStatus[b'total_size']])
- else:
- logger.error('Connect error')
- # get download folder's size
- # dataSize = client.call('core.get_path_size', dataPath)
- dataSize = int(os.popen("du -sB 1KB " + dataPath + " | awk '{print $1}'").readlines()[0]) * 1000
- # sort by upload speed(if same, sort by size)
- resList = sorted(resList, key=lambda x:x[3])
- resList = sorted(resList, key=lambda x:x[1])
- logger.info('Finished torrents: ' + str(resList))
- logger.info('All torrent\'s size: ' + str(dataSize) + '(' + str(round(dataSize/1000/1000/1000, 3)) + 'GB)')
- # delete lowest uploadspeed's torrent
- if dataSize > limitSize:
- selectedTorrent = resList[0]
- logger.info('Deleting ' + str(selectedTorrent[0]) + ', size is ' + str(dataSize) + '(' + str(round(selectedTorrent[3]/1000/1000/1000, 3)) + 'GB)')
- client.call('core.remove_torrent', selectedTorrent[0], True)
- torrentList = client.call('core.get_session_state')
- if selectedTorrent[0].encode() not in torrentList:
- logger.info('Delete success')
- else:
- logger.error('Delete error')
- if __name__ == '__main__':
- while True:
- try:
- main()
- except Exception as e:
- logger.error(e)
- time.sleep(150)
Add Comment
Please, Sign In to add comment