'Periodically populate the payload with metadata related to the system, host, and/or checks.'

def _populate_payload_metadata(self, payload, check_statuses, start_event=True):

    now = time.time()
    if (start_event and self._is_first_run()):
        payload['systemStats'] = self.agentConfig.get('system_stats', {})
        payload['events']['System'] = [{'api_key': self.agentConfig['api_key'], 'host': self.hostname, 'timestamp': now, 'event_type': 'Agent    Startup', 'msg_text': ('Version    %s' % get_version())}]
    if self._should_send_additional_data('host_metadata'):
        gohai_metadata = self._run_gohai_metadata()
        if gohai_metadata:
            payload['gohai'] = gohai_metadata
        payload['systemStats'] = get_system_stats(proc_path=self.agentConfig.get('procfs_path', '/proc').rstrip('/'))
        payload['meta'] = self._get_hostname_metadata()
        self.hostname_metadata_cache = payload['meta']
        host_tags = []
        if (self.agentConfig['tags'] is not None):
            host_tags.extend([unicode(tag.strip()) for tag in self.agentConfig['tags'].split(',')])
        if self.agentConfig['collect_ec2_tags']:
            host_tags.extend(EC2.get_tags(self.agentConfig))
        if self.agentConfig['collect_orchestrator_tags']:
            host_docker_tags = MetadataCollector().get_host_tags()
            if host_docker_tags:
                host_tags.extend(host_docker_tags)
        if host_tags:
            payload['host-tags']['system'] = host_tags
        if self.agentConfig['create_dd_check_tags']:
            app_tags_list = [DD_CHECK_TAG.format(c.name) for c in self.initialized_checks_d]
            app_tags_list.extend([DD_CHECK_TAG.format(cname) for cname in JMXFiles.get_jmx_appnames()])
            if ('system' not in payload['host-tags']):
                payload['host-tags']['system'] = []
            payload['host-tags']['system'].extend(app_tags_list)
        GCE_tags = GCE.get_tags(self.agentConfig)
        if (GCE_tags is not None):
            payload['host-tags'][GCE.SOURCE_TYPE_NAME] = GCE_tags
        if self._is_first_run():
            log.info(('Hostnames:    %s,    tags:    %s' % (repr(self.hostname_metadata_cache), payload['host-tags'])))
    external_host_tags = []
    if self._should_send_additional_data('external_host_tags'):
        for check in self.initialized_checks_d:
            try:
                getter = getattr(check, 'get_external_host_tags')
                check_tags = getter()
                external_host_tags.extend(check_tags)
            except AttributeError:
                pass
    if external_host_tags:
        payload['external_host_tags'] = external_host_tags
    if self._should_send_additional_data('agent_checks'):
        agent_checks = []
        for check in check_statuses:
            if (check.instance_statuses is not None):
                for (i, instance_status) in enumerate(check.instance_statuses):
                    agent_checks.append((check.name, check.source_type_name, instance_status.instance_id, instance_status.status, (instance_status.error or instance_status.warnings or ''), check.service_metadata[i]))
            else:
                agent_checks.append((check.name, check.source_type_name, 'initialization', check.status, repr(check.init_failed_error)))
        payload['agent_checks'] = agent_checks
        payload['meta'] = self.hostname_metadata_cache
