Получите использование виртуальной памяти VirtualBox через vboxapi

520
Joren Inghelbrecht

Итак, я работаю над приложением python, которое сообщает информацию о хосте, на котором работает VirtualBox, веб-серверу. Поэтому я использую vboxapi . Я могу отправить информацию о хосте с помощью следующего кода:

from vboxapi import VirtualBoxManager mgr = VirtualBoxManager(None, None) vbox = mgr.vbox host = vbox.host log['host'] = { 'processorCount': host.processorCount, 'processorCoreCount': host.processorCoreCount, 'processorOnlineCount': host.processorOnlineCount, 'processorOnlineCoreCount': host.processorOnlineCoreCount, 'memorySize': host.memorySize, 'memoryAvailable': host.memoryAvailable, } send_to_webserver(log) 

То, что я хотел бы сделать, это отправить информацию о запущенных гостях, таких как использование ОЗУ и ЦП. Я могу получить максимально доступный объем оперативной памяти сmachine.memorySize, но не текущее использование. При просмотре документации по vboxapi это должно быть возможно с помощью PerformanceCollector, но я могу заставить это работать, а также не могу найти рабочий пример. Может кто-то помочь мне с этим?

Необходимые действия приведены на стр. 274 документации.

Ps. мой хост - машина с Windows, мои гости - Ubuntu 16.04.

0

1 ответ на вопрос

0
Joren Inghelbrecht

Я понял это в конце концов. На всякий случай, если кто-то еще изучает это:

mgr = VirtualBoxManager(None, None) vbox = mgr.vbox # Enabling performance collection perfomance_collector = self.vbox.performanceCollector # Enable metrics (None = all metrics, None = all machines) perfomance_collector.enableMetrics(None, None) # Setup metrics (None = all metrics, None = all machines, 1 sample every second, keep up to 15 samples) perfomance_collector.setupMetrics(None, None, 1, 15)  while True: # get metrics (values, names_out, objects_out, units, scales, sequence_numbers, indices, lengths) = perfomance_collector.queryMetricsData(None, None) out = [] # process results for i in range(0, len(names_out)): scale = int(scales[i]) if scale != 1: fmt = '%.2f%s' else: fmt = '%d %s' out.append({ 'name': str(names_out[i]), 'object': str(objects_out[i]), 'unit': str(units[i]), 'scale': scale, 'values': [int(values[j]) for j in range(int(indices[i]), int(indices[i]) + int(lengths[i]))], 'values_as_string': '[' + ', '.join([fmt % (int(values[j]) / scale, units[i]) for j in range(int(indices[i]), int(indices[i]) + int(lengths[i]))]) + ']' }) # print something useful for metric in out: print(metric['name'], metric['values_as_string']) time.sleep(5) 
How do you run this script? Just `py ` or such? Frank Nocke 6 лет назад 0
Это часть более крупного приложения, но если вы объедините код моего вопроса и ответа, оно должно работать. Joren Inghelbrecht 6 лет назад 0

Похожие вопросы