| 
									
										
										
										
											2015-09-26 08:36:40 -07:00
										 |  |  | // Copyright 2015 The Prometheus Authors
 | 
					
						
							|  |  |  | // Licensed under the Apache License, Version 2.0 (the "License");
 | 
					
						
							|  |  |  | // you may not use this file except in compliance with the License.
 | 
					
						
							|  |  |  | // You may obtain a copy of the License at
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Unless required by applicable law or agreed to in writing, software
 | 
					
						
							|  |  |  | // distributed under the License is distributed on an "AS IS" BASIS,
 | 
					
						
							|  |  |  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					
						
							|  |  |  | // See the License for the specific language governing permissions and
 | 
					
						
							|  |  |  | // limitations under the License.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-18 03:35:11 -08:00
										 |  |  | package collector | 
					
						
							| 
									
										
										
										
											2013-05-07 07:40:10 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2022-07-27 11:59:39 -07:00
										 |  |  | 	"os" | 
					
						
							| 
									
										
										
										
											2021-10-11 06:12:25 -07:00
										 |  |  | 	"regexp" | 
					
						
							| 
									
										
										
										
											2013-05-07 07:40:10 -07:00
										 |  |  | 	"strconv" | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-15 04:16:12 -08:00
										 |  |  | func readUintFromFile(path string) (uint64, error) { | 
					
						
							| 
									
										
										
										
											2022-07-27 11:59:39 -07:00
										 |  |  | 	data, err := os.ReadFile(path) | 
					
						
							| 
									
										
										
										
											2016-01-15 04:16:12 -08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return 0, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	value, err := strconv.ParseUint(strings.TrimSpace(string(data)), 10, 64) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return 0, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return value, nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-06-02 04:06:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-08 17:50:25 -08:00
										 |  |  | func readStringFromFile(path string) string { | 
					
						
							|  |  |  | 	data, err := os.ReadFile(path) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return "" | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return strings.TrimSpace(string(data)) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-11 06:12:25 -07:00
										 |  |  | var metricNameRegex = regexp.MustCompile(`_*[^0-9A-Za-z_]+_*`) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-08 22:36:59 -07:00
										 |  |  | // SanitizeMetricName sanitize the given metric name by replacing invalid characters by underscores.
 | 
					
						
							| 
									
										
										
										
											2021-10-11 06:12:25 -07:00
										 |  |  | //
 | 
					
						
							|  |  |  | // OpenMetrics and the Prometheus exposition format require the metric name
 | 
					
						
							|  |  |  | // to consist only of alphanumericals and "_", ":" and they must not start
 | 
					
						
							|  |  |  | // with digits. Since colons in MetricFamily are reserved to signal that the
 | 
					
						
							|  |  |  | // MetricFamily is the result of a calculation or aggregation of a general
 | 
					
						
							|  |  |  | // purpose monitoring system, colons will be replaced as well.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Note: If not subsequently prepending a namespace and/or subsystem (e.g.,
 | 
					
						
							|  |  |  | // with prometheus.BuildFQName), the caller must ensure that the supplied
 | 
					
						
							|  |  |  | // metricName does not begin with a digit.
 | 
					
						
							|  |  |  | func SanitizeMetricName(metricName string) string { | 
					
						
							|  |  |  | 	return metricNameRegex.ReplaceAllString(metricName, "_") | 
					
						
							|  |  |  | } |