Guest User

Untitled

a guest
Apr 1st, 2019
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. # -*- coding:utf-8 -*-
  2. # !/usr/bin/env python3
  3.  
  4. '''
  5. Author: ayasakinagi
  6. Email: xyz.wang@outlook.com
  7.  
  8. 环境: Python3
  9. 依赖: deluge_client
  10. 使用: 修改host, port, username, password, limitSize, dataPath变量
  11. '''
  12.  
  13. import os
  14. import time
  15. import logging
  16. from deluge_client import DelugeRPCClient
  17.  
  18. # 主机地址
  19. host = '127.0.0.1'
  20. # deluge端口
  21. port = 58846
  22. # deluge 管理用户名,可在~/.config/deluge/auth找到
  23. username = ''
  24. # deluge密码,非webUI密码
  25. password = ''
  26. # 限制deluge data目录大小, 默认为1TB
  27. limitSize = 1000000000000
  28. # deluge data目录
  29. dataPath = '/media/sdad1/littleya/private/deluge/data/'
  30.  
  31. logPath = '/tmp/delugeDelete.log'
  32. # init log
  33. handler1 = logging.FileHandler(logPath)
  34. handler2 = logging.StreamHandler()
  35. fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(message)s'
  36.  
  37. formatter = logging.Formatter(fmt)
  38. handler1.setFormatter(formatter)
  39. handler2.setFormatter(formatter)
  40.  
  41. logger = logging.getLogger('log')
  42. logger.addHandler(handler1)
  43. logger.addHandler(handler2)
  44. logger.setLevel(logging.DEBUG)
  45.  
  46.  
  47. def main():
  48. client = DelugeRPCClient(host, port, username, password)
  49. client.connect()
  50.  
  51. # get torrent's status
  52. resList = []
  53. if client.connected:
  54. torrentList = client.call('core.get_session_state')
  55. for i in torrentList:
  56. torrentStatus = client.call('core.get_torrent_status', i, ['is_finished', 'total_size', 'total_peers', 'peers'])
  57. if not torrentStatus[b'is_finished']:
  58. continue
  59. elif torrentStatus[b'total_peers'] == 0 or len(torrentStatus[b'peers']) == 0:
  60. total_speed = 0
  61. else:
  62. total_speed = 0
  63. for j in torrentStatus[b'peers']:
  64. total_speed += j[b'up_speed']
  65. resList.append([bytes.decode(i), total_speed, torrentStatus[b'is_finished'], torrentStatus[b'total_size']])
  66. else:
  67. logger.error('Connect error')
  68.  
  69. # get download folder's size
  70. # dataSize = client.call('core.get_path_size', dataPath)
  71. dataSize = int(os.popen("du -sB 1KB " + dataPath + " | awk '{print $1}'").readlines()[0]) * 1000
  72.  
  73. # sort by upload speed(if same, sort by size)
  74. resList = sorted(resList, key=lambda x:x[3])
  75. resList = sorted(resList, key=lambda x:x[1])
  76.  
  77. logger.info('Finished torrents: ' + str(resList))
  78. logger.info('All torrent\'s size: ' + str(dataSize) + '(' + str(round(dataSize/1000/1000/1000, 3)) + 'GB)')
  79.  
  80. # delete lowest uploadspeed's torrent
  81. if dataSize > limitSize:
  82. selectedTorrent = resList[0]
  83. logger.info('Deleting ' + str(selectedTorrent[0]) + ', size is ' + str(dataSize) + '(' + str(round(selectedTorrent[3]/1000/1000/1000, 3)) + 'GB)')
  84. client.call('core.remove_torrent', selectedTorrent[0], True)
  85. torrentList = client.call('core.get_session_state')
  86. if selectedTorrent[0].encode() not in torrentList:
  87. logger.info('Delete success')
  88. else:
  89. logger.error('Delete error')
  90.  
  91. if __name__ == '__main__':
  92. while True:
  93. try:
  94. main()
  95. except Exception as e:
  96. logger.error(e)
  97. time.sleep(150)
Add Comment
Please, Sign In to add comment