<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def track_metric(self, name, value, type=None, count=None, min=None, max=None, std_dev=None, properties=None):
 """Send information about a single metric data point that was captured for the application. Args: name (str). the name of the metric that was captured.\n value (float). the value of the metric that was captured.\n type (:class:`channel.contracts.DataPointType`). the type of the metric. (defaults to: :func:`channel.contracts.DataPointType.aggregation`)\n count (int). the number of metrics that were aggregated into this data point. (defaults to: None)\n min (float). the minimum of all metrics collected that were aggregated into this data point. (defaults to: None)\n max (float). the maximum of all metrics collected that were aggregated into this data point. (defaults to: None)\n std_dev (float). the standard deviation of all metrics collected that were aggregated into this data point. (defaults to: None)\n properties (dict). the set of custom properties the client wants attached to this data item. (defaults to: None) """

        dataPoint = channel.contracts.DataPoint()
        dataPoint.name = name or NULL_CONSTANT_STRING
        dataPoint.value = value or 0
        dataPoint.kind = type or channel.contracts.DataPointType.aggregation
        dataPoint.count = count
        dataPoint.min = min
        dataPoint.max = max
        dataPoint.std_dev = std_dev

        data = channel.contracts.MetricData()
        data.metrics.append(dataPoint)
        if properties:
            data.properties = properties

        self.track(data, self._context)