File: //usr/syno/bin/user.data.collector/synouserdata_bonjour
#!/usr/bin/env python
from subprocess import Popen, PIPE, STDOUT
import json
import sys
COLLECTOR_VERSION_KEY = "collector_version"
COLLECTOR_VERSION = 1
def get_bonjour_devices_num():
device_num = 0
services = set()
cmd = '/usr/sbin/avahi-browse -t -a -l -p'
process = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
output = process.stdout.read()
process.communicate()
if process.returncode != 0:
return device_num, services
result = {}
for line in output.split('\n'):
# +;ovs_eth1;IPv4;dada-3614;_afpovertcp._tcp;local
line = line.strip().split(';')
if len(line) < 6:
continue
_, _, _, dev_name, service, _ = line
if dev_name not in result:
result[dev_name] = []
result[dev_name].append(service)
device_num = len(result)
for servs in result.values():
for serv in servs:
services.add(serv)
return device_num, services
def main():
''' Result output
{
COLLECTOR_VERSION_KEY: COLLECTOR_VERSION
bonjour_device_num: int
bonjour_services: []
}
'''
result = {
COLLECTOR_VERSION_KEY: COLLECTOR_VERSION,
'bonjour_device_num': 0,
'bonjour_services': []
}
result['bonjour_device_num'], result['bonjour_services'] = get_bonjour_devices_num()
result['bonjour_services'] = list(result['bonjour_services'])
sys.stdout.write(json.dumps(result))
if __name__ == '__main__':
main()