mirror of
				https://github.com/bastienwirtz/homer.git
				synced 2025-10-31 02:15:50 +01:00 
			
		
		
		
	Added Tdarr service (#573)
* Added Tdarr service Signed-off-by: Matt Bentley <mbentley@mbentley.net> * Added dummy-data for Tdarr; remove trailing / for API endpoint Signed-off-by: Matt Bentley <mbentley@mbentley.net> --------- Signed-off-by: Matt Bentley <mbentley@mbentley.net>
This commit is contained in:
		| @@ -32,6 +32,7 @@ within Homer: | |||||||
|   - [What's Up Docker](#whats-up-docker) |   - [What's Up Docker](#whats-up-docker) | ||||||
|   - [SABnzbd](#sabnzbd) |   - [SABnzbd](#sabnzbd) | ||||||
|   - [OctoPrint](#sabnzbd) |   - [OctoPrint](#sabnzbd) | ||||||
|  |   - [Tdarr](#tdarr) | ||||||
|  |  | ||||||
| If you experiencing any issue, please have a look to the [troubleshooting](troubleshooting.md) page. | If you experiencing any issue, please have a look to the [troubleshooting](troubleshooting.md) page. | ||||||
|  |  | ||||||
| @@ -391,3 +392,16 @@ The OctoPrint service only needs an `apikey` & `url` and optionally a `display` | |||||||
|   display: "text" # 'text' or 'bar'. Default to `text`. |   display: "text" # 'text' or 'bar'. Default to `text`. | ||||||
|   type: "OctoPrint" |   type: "OctoPrint" | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | ## Tdarr | ||||||
|  |  | ||||||
|  | The Tdarr service can allow you to show the number of currently queued items | ||||||
|  | for transcoding on your Tdarr instance as well as the number of errored items. | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - name: "Tdarr" | ||||||
|  |   logo: "assets/tools/sample.png" | ||||||
|  |   url: "http://192.168.0.151:8265" | ||||||
|  |   type: "Tdarr" | ||||||
|  |   checkInterval: 5000 # (Optional) Interval (in ms) for updating the queue & error counts | ||||||
|  | ``` | ||||||
|   | |||||||
							
								
								
									
										470
									
								
								dummy-data/tdarr/api/v2/cruddb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										470
									
								
								dummy-data/tdarr/api/v2/cruddb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,470 @@ | |||||||
|  | { | ||||||
|  |   "totalFileCount": 3245, | ||||||
|  |   "totalTranscodeCount": 3148, | ||||||
|  |   "totalHealthCheckCount": 7278, | ||||||
|  |   "sizeDiff": 5265.423687950708, | ||||||
|  |   "_id": "statistics", | ||||||
|  |   "tdarrScore": "99.97", | ||||||
|  |   "healthCheckScore": "99.97", | ||||||
|  |   "table0Count": 0, | ||||||
|  |   "table2Count": 3244, | ||||||
|  |   "table3Count": 0, | ||||||
|  |   "table4Count": 1, | ||||||
|  |   "table5Count": 3244, | ||||||
|  |   "table6Count": 0, | ||||||
|  |   "table1Count": 1, | ||||||
|  |   "pies": [ | ||||||
|  |     [ | ||||||
|  |       "All", | ||||||
|  |       "all", | ||||||
|  |       3245, | ||||||
|  |       3148, | ||||||
|  |       5265.423687950708, | ||||||
|  |       7278, | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Transcode success", | ||||||
|  |           "value": 1995 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "Not required", | ||||||
|  |           "value": 1249 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "Queued", | ||||||
|  |           "value": 1 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Success", | ||||||
|  |           "value": 3244 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "Queued", | ||||||
|  |           "value": 1 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "hevc", | ||||||
|  |           "value": 3172 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "vp9", | ||||||
|  |           "value": 48 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "h264", | ||||||
|  |           "value": 24 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "mkv", | ||||||
|  |           "value": 3115 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "webm", | ||||||
|  |           "value": 48 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "mp4", | ||||||
|  |           "value": 81 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "1080p", | ||||||
|  |           "value": 2582 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "480p", | ||||||
|  |           "value": 406 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "720p", | ||||||
|  |           "value": 224 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "4KUHD", | ||||||
|  |           "value": 29 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "576p", | ||||||
|  |           "value": 3 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [], | ||||||
|  |       [] | ||||||
|  |     ], | ||||||
|  |     [ | ||||||
|  |       "Type1", | ||||||
|  |       "t7_0knr-z", | ||||||
|  |       3, | ||||||
|  |       0, | ||||||
|  |       0, | ||||||
|  |       3, | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Not required", | ||||||
|  |           "value": 3 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Success", | ||||||
|  |           "value": 3 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "hevc", | ||||||
|  |           "value": 3 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "mkv", | ||||||
|  |           "value": 3 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "480p", | ||||||
|  |           "value": 3 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [], | ||||||
|  |       [] | ||||||
|  |     ], | ||||||
|  |     [ | ||||||
|  |       "Type2", | ||||||
|  |       "ekyBRmWbD", | ||||||
|  |       9, | ||||||
|  |       13, | ||||||
|  |       10.722183834761381, | ||||||
|  |       65, | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Transcode success", | ||||||
|  |           "value": 9 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Success", | ||||||
|  |           "value": 9 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "hevc", | ||||||
|  |           "value": 9 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "mkv", | ||||||
|  |           "value": 9 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "480p", | ||||||
|  |           "value": 1 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "576p", | ||||||
|  |           "value": 1 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "720p", | ||||||
|  |           "value": 4 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "1080p", | ||||||
|  |           "value": 3 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [], | ||||||
|  |       [] | ||||||
|  |     ], | ||||||
|  |     [ | ||||||
|  |       "Type3", | ||||||
|  |       "-dy1H5yNz", | ||||||
|  |       2619, | ||||||
|  |       2641, | ||||||
|  |       2710.185842271894, | ||||||
|  |       5837, | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Transcode success", | ||||||
|  |           "value": 1586 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "Not required", | ||||||
|  |           "value": 1033 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Success", | ||||||
|  |           "value": 2619 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "hevc", | ||||||
|  |           "value": 2571 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "vp9", | ||||||
|  |           "value": 48 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "mkv", | ||||||
|  |           "value": 2510 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "webm", | ||||||
|  |           "value": 48 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "mp4", | ||||||
|  |           "value": 61 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "1080p", | ||||||
|  |           "value": 2050 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "720p", | ||||||
|  |           "value": 186 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "480p", | ||||||
|  |           "value": 383 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [], | ||||||
|  |       [] | ||||||
|  |     ], | ||||||
|  |     [ | ||||||
|  |       "Type4", | ||||||
|  |       "ASRD2TAeP", | ||||||
|  |       1, | ||||||
|  |       11, | ||||||
|  |       83.31165281962603, | ||||||
|  |       32, | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Queued", | ||||||
|  |           "value": 1 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Queued", | ||||||
|  |           "value": 1 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "h264", | ||||||
|  |           "value": 1 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "mp4", | ||||||
|  |           "value": 1 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "1080p", | ||||||
|  |           "value": 1 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [], | ||||||
|  |       [] | ||||||
|  |     ], | ||||||
|  |     [ | ||||||
|  |       "Type5", | ||||||
|  |       "KQ03rLWIw", | ||||||
|  |       11, | ||||||
|  |       14, | ||||||
|  |       17.225701110437512, | ||||||
|  |       43, | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Not required", | ||||||
|  |           "value": 11 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Success", | ||||||
|  |           "value": 11 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "hevc", | ||||||
|  |           "value": 11 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "mkv", | ||||||
|  |           "value": 11 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "720p", | ||||||
|  |           "value": 6 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "480p", | ||||||
|  |           "value": 4 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "1080p", | ||||||
|  |           "value": 1 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [], | ||||||
|  |       [] | ||||||
|  |     ], | ||||||
|  |     [ | ||||||
|  |       "Type6", | ||||||
|  |       "RQhHe9OCl", | ||||||
|  |       602, | ||||||
|  |       473, | ||||||
|  |       2420.9242209186777, | ||||||
|  |       1300, | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Not required", | ||||||
|  |           "value": 202 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "Transcode success", | ||||||
|  |           "value": 400 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "Success", | ||||||
|  |           "value": 602 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "hevc", | ||||||
|  |           "value": 578 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "h264", | ||||||
|  |           "value": 23 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "mkv", | ||||||
|  |           "value": 582 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "mp4", | ||||||
|  |           "value": 19 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [ | ||||||
|  |         { | ||||||
|  |           "name": "480p", | ||||||
|  |           "value": 15 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "1080p", | ||||||
|  |           "value": 527 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "4KUHD", | ||||||
|  |           "value": 29 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "720p", | ||||||
|  |           "value": 28 | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "name": "576p", | ||||||
|  |           "value": 2 | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       [], | ||||||
|  |       [] | ||||||
|  |     ] | ||||||
|  |   ], | ||||||
|  |   "streamStats": { | ||||||
|  |     "duration": { | ||||||
|  |       "average": 3127, | ||||||
|  |       "highest": 8548, | ||||||
|  |       "total": 253273 | ||||||
|  |     }, | ||||||
|  |     "bit_rate": { | ||||||
|  |       "average": 2242894, | ||||||
|  |       "highest": 20149278, | ||||||
|  |       "total": 181674395 | ||||||
|  |     }, | ||||||
|  |     "nb_frames": { | ||||||
|  |       "average": 75320, | ||||||
|  |       "highest": 204941, | ||||||
|  |       "total": 6100852 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "avgNumberOfStreamsInVideo": 5.049321824907522, | ||||||
|  |   "languages": { | ||||||
|  |     "ara": { | ||||||
|  |       "count": 181 | ||||||
|  |     }, | ||||||
|  |     "est": { | ||||||
|  |       "count": 62 | ||||||
|  |     }, | ||||||
|  |     "lav": { | ||||||
|  |       "count": 62 | ||||||
|  |     }, | ||||||
|  |     "may": { | ||||||
|  |       "count": 131 | ||||||
|  |     }, | ||||||
|  |     "nor": { | ||||||
|  |       "count": 110 | ||||||
|  |     }, | ||||||
|  |     "chi": { | ||||||
|  |       "count": 384 | ||||||
|  |     }, | ||||||
|  |     "ind": { | ||||||
|  |       "count": 63 | ||||||
|  |     }, | ||||||
|  |     "rum": { | ||||||
|  |       "count": 138 | ||||||
|  |     }, | ||||||
|  |     "nob": { | ||||||
|  |       "count": 18 | ||||||
|  |     }, | ||||||
|  |     "srp": { | ||||||
|  |       "count": 3 | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "DBPollPeriod": "1s", | ||||||
|  |   "DBFetchTime": "1s", | ||||||
|  |   "DBLoadStatus": "Stable", | ||||||
|  |   "DBQueue": 0, | ||||||
|  |   "processWarning": "", | ||||||
|  |   "processWarningQueues": true | ||||||
|  | } | ||||||
							
								
								
									
										125
									
								
								src/components/services/Tdarr.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								src/components/services/Tdarr.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | |||||||
|  | <template> | ||||||
|  |   <Generic :item="item"> | ||||||
|  |     <template #indicator> | ||||||
|  |       <div class="notifs"> | ||||||
|  |         <strong | ||||||
|  |           v-if="queue > 0" | ||||||
|  |           class="notif queue" | ||||||
|  |           :title="`${queue} items queued`" | ||||||
|  |         > | ||||||
|  |           {{ queue }} | ||||||
|  |         </strong> | ||||||
|  |         <strong | ||||||
|  |           v-if="errored > 0" | ||||||
|  |           class="notif errored" | ||||||
|  |           :title="`${errored} items`" | ||||||
|  |         > | ||||||
|  |           {{ errored }} | ||||||
|  |         </strong> | ||||||
|  |         <i | ||||||
|  |           v-if="error" | ||||||
|  |           class="notif error fa-solid fa-triangle-exclamation" | ||||||
|  |           title="Unable to fetch current status" | ||||||
|  |         ></i> | ||||||
|  |       </div> | ||||||
|  |     </template> | ||||||
|  |   </Generic> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import service from "@/mixins/service.js"; | ||||||
|  | import Generic from "./Generic.vue"; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: "Tdarr", | ||||||
|  |   mixins: [service], | ||||||
|  |   props: { | ||||||
|  |     item: Object, | ||||||
|  |   }, | ||||||
|  |   components: { | ||||||
|  |     Generic, | ||||||
|  |   }, | ||||||
|  |   data: () => ({ | ||||||
|  |     stats: null, | ||||||
|  |     error: false, | ||||||
|  |   }), | ||||||
|  |   computed: { | ||||||
|  |     queue: function () { | ||||||
|  |       if (!this.stats) { | ||||||
|  |         return ""; | ||||||
|  |       } | ||||||
|  |       return this.stats.table1Count; | ||||||
|  |     }, | ||||||
|  |     errored: function () { | ||||||
|  |       if (!this.stats) { | ||||||
|  |         return ""; | ||||||
|  |       } | ||||||
|  |       return this.stats.table6Count; | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   created() { | ||||||
|  |     const checkInterval = parseInt(this.item.checkInterval, 10) || 0; | ||||||
|  |     if (checkInterval > 0) { | ||||||
|  |       setInterval(() => this.fetchStatus(), checkInterval); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     this.fetchStatus(); | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     fetchStatus: async function () { | ||||||
|  |       try { | ||||||
|  |         const options = { | ||||||
|  |           method: "POST", | ||||||
|  |           headers: { | ||||||
|  |             "Content-Type": "application/json", | ||||||
|  |             "Accept": "application/json", | ||||||
|  |           }, | ||||||
|  |           body: JSON.stringify({"headers":{"content-Type":"application/json"},"data":{"collection":"StatisticsJSONDB","mode":"getById","docID":"statistics","obj":{}},"timeout":1000}), | ||||||
|  |         }; | ||||||
|  |         const response = await this.fetch( | ||||||
|  |           `/api/v2/cruddb`, | ||||||
|  |           options | ||||||
|  |         ); | ||||||
|  |         this.error = false; | ||||||
|  |         this.stats = response; | ||||||
|  |       } catch (e) { | ||||||
|  |         this.error = true; | ||||||
|  |         console.error(e); | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .notifs { | ||||||
|  |   position: absolute; | ||||||
|  |   color: white; | ||||||
|  |   font-family: sans-serif; | ||||||
|  |   top: 0.3em; | ||||||
|  |   right: 0.5em; | ||||||
|  |  | ||||||
|  |   .notif { | ||||||
|  |     display: inline-block; | ||||||
|  |     padding: 0.2em 0.35em; | ||||||
|  |     border-radius: 0.25em; | ||||||
|  |     position: relative; | ||||||
|  |     margin-left: 0.3em; | ||||||
|  |     font-size: 0.8em; | ||||||
|  |  | ||||||
|  |     &.queue { | ||||||
|  |       background-color: #28a9a3; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     &.errored { | ||||||
|  |       background-color: #e51111; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     &.error { | ||||||
|  |       border-radius: 50%; | ||||||
|  |       aspect-ratio: 1; | ||||||
|  |       background-color: #e51111; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
		Reference in New Issue
	
	Block a user