private function calculateNodePriority(Node $node, $currentNodeId)
    {
        $priority = $node->getJobCount();

        if ($node->getId() === $currentNodeId) {
            $margin = 1 + $this->marginToSwitch;
            $priority = $priority * $margin;
        }

        // Apply a weight determined by the node priority as assigned by Disque.
        // Priority 1 means the node is healthy.
        // Priority 10 to 100 means the node is probably failing, or has failed
        $disquePriority = $node->getPriority();

        // Disque node priority should never be lower than 1, but let's be sure
        if ($disquePriority < Node::PRIORITY_OK) {
            $disquePriorityWeight = 1;
        } elseif (Node::PRIORITY_OK <= $disquePriority && $disquePriority < Node::PRIORITY_POSSIBLE_FAILURE) {
            // Node is OK, but Disque may have assigned a lower priority to it
            // We use the base-10 logarithm in the formula, so priorities
            // 1 to 10 transform into a weight of 1 to 0.5. When Disque starts
            // using more priority steps, priority 9 will discount about a half
            // of the job count.
            $disquePriorityWeight = 1 / (1 + log10($disquePriority));
        } else {
            // Node is failing, or it has failed
            $disquePriorityWeight = 0;
        }

        $priority = $priority * $disquePriorityWeight;
        return (float) $priority;
    }