code: def dedup_alert(self, alert, history):
          
          query = {
              'environment': alert.environment,
              'resource': alert.resource,
              'event': alert.event,
              'severity': alert.severity,
              'customer': alert.customer
          }
  
          now = datetime.utcnow()
          update = {
              '$set': {
                  'status': alert.status,
                  'service': alert.service,
                  'value': alert.value,
                  'text': alert.text,
                  'timeout': alert.timeout,
                  'rawData': alert.raw_data,
                  'repeat': True,
                  'lastReceiveId': alert.id,
                  'lastReceiveTime': now
              },
              '$addToSet': {'tags': {'$each': alert.tags}},
              '$inc': {'duplicateCount': 1}
          }
  
          # only update those attributes that are specifically defined
          attributes = {'attributes.' + k: v for k, v in alert.attributes.items()}
          update['$set'].update(attributes)
  
          if alert.update_time:
              update['$set']['updateTime'] = alert.update_time
  
          if history:
              update['$push'] = {
                  'history': {
                      '$each': [history.serialize],
                      '$slice': -abs(current_app.config['HISTORY_LIMIT'])
                  }
              }
  
          return self.get_db().alerts.find_one_and_update(
              query,
              update=update,
              return_document=ReturnDocument.AFTER
          )
docs: Update alert status, service, value, text, timeout and rawData, increment duplicate count and set
          repeat=True, and keep track of last receive id and time but don't append to history unless status changes.