Create a new command history subscription.

        :param .IssuedCommand[] issued_command: (Optional) Previously issued
                                                commands. If not provided updates
                                                from any command are received.
        :param on_data: Function that gets called with  :class:`.CommandHistory`
                        updates.
        :param float timeout: The amount of seconds to wait for the request
                              to complete.
        :return: Future that can be used to manage the background websocket
                 subscription
        :rtype: .CommandHistorySubscription

def create_command_history_subscription(self,
                                            issued_command=None,
                                            on_data=None,
                                            timeout=60):
        """
        Create a new command history subscription.

        :param .IssuedCommand[] issued_command: (Optional) Previously issued
                                                commands. If not provided updates
                                                from any command are received.
        :param on_data: Function that gets called with  :class:`.CommandHistory`
                        updates.
        :param float timeout: The amount of seconds to wait for the request
                              to complete.
        :return: Future that can be used to manage the background websocket
                 subscription
        :rtype: .CommandHistorySubscription
        """
        options = web_pb2.CommandHistorySubscriptionRequest()
        options.ignorePastCommands = True
        if issued_command:
            options.commandId.extend(_build_command_ids(issued_command))

        manager = WebSocketSubscriptionManager(
            self._client, resource='cmdhistory', options=options)

        # Represent subscription as a future
        subscription = CommandHistorySubscription(manager)

        wrapped_callback = functools.partial(
            _wrap_callback_parse_cmdhist_data, subscription, on_data)

        manager.open(wrapped_callback, instance=self._instance,
                     processor=self._processor)

        # Wait until a reply or exception is received
        subscription.reply(timeout=timeout)

        return subscription