<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a name="line.1">/*</a>
<span class="sourceLineNo">002</span><a name="line.2"> * Licensed to the Apache Software Foundation (ASF) under one or more</a>
<span class="sourceLineNo">003</span><a name="line.3"> * contributor license agreements. See the NOTICE file distributed with</a>
<span class="sourceLineNo">004</span><a name="line.4"> * this work for additional information regarding copyright ownership.</a>
<span class="sourceLineNo">005</span><a name="line.5"> * The ASF licenses this file to You under the Apache license, Version 2.0</a>
<span class="sourceLineNo">006</span><a name="line.6"> * (the "License"); you may not use this file except in compliance with</a>
<span class="sourceLineNo">007</span><a name="line.7"> * the License. You may obtain a copy of the License at</a>
<span class="sourceLineNo">008</span><a name="line.8"> *</a>
<span class="sourceLineNo">009</span><a name="line.9"> *      http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">010</span><a name="line.10"> *</a>
<span class="sourceLineNo">011</span><a name="line.11"> * Unless required by applicable law or agreed to in writing, software</a>
<span class="sourceLineNo">012</span><a name="line.12"> * distributed under the License is distributed on an "AS IS" BASIS,</a>
<span class="sourceLineNo">013</span><a name="line.13"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</a>
<span class="sourceLineNo">014</span><a name="line.14"> * See the license for the specific language governing permissions and</a>
<span class="sourceLineNo">015</span><a name="line.15"> * limitations under the license.</a>
<span class="sourceLineNo">016</span><a name="line.16"> */</a>
<span class="sourceLineNo">017</span><a name="line.17">package org.apache.logging.log4j.kubernetes;</a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19">import java.time.Duration;</a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21">import org.apache.logging.log4j.util.PropertiesUtil;</a>
<span class="sourceLineNo">022</span><a name="line.22"></a>
<span class="sourceLineNo">023</span><a name="line.23">import io.fabric8.kubernetes.client.Config;</a>
<span class="sourceLineNo">024</span><a name="line.24"></a>
<span class="sourceLineNo">025</span><a name="line.25">/**</a>
<span class="sourceLineNo">026</span><a name="line.26"> * Obtains properties used to configure the Kubernetes client.</a>
<span class="sourceLineNo">027</span><a name="line.27"> */</a>
<span class="sourceLineNo">028</span><a name="line.28">public class KubernetesClientProperties {</a>
<span class="sourceLineNo">029</span><a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30">    private static final String[] PREFIXES = {"log4j2.kubernetes.client.", "spring.cloud.kubernetes.client."};</a>
<span class="sourceLineNo">031</span><a name="line.31">    private static final String API_VERSION = "apiVersion";</a>
<span class="sourceLineNo">032</span><a name="line.32">    private static final String CA_CERT_FILE = "caCertFile";</a>
<span class="sourceLineNo">033</span><a name="line.33">    private static final String CA_CERT_DATA = "caCertData";</a>
<span class="sourceLineNo">034</span><a name="line.34">    private static final String CLIENT_CERT_FILE = "clientCertFile";</a>
<span class="sourceLineNo">035</span><a name="line.35">    private static final String CLIENT_CERT_DATA = "clientCertData";</a>
<span class="sourceLineNo">036</span><a name="line.36">    private static final String CLIENT_KEY_FILE = "clientKeyFile";</a>
<span class="sourceLineNo">037</span><a name="line.37">    private static final String CLIENT_KEY_DATA = "cientKeyData";</a>
<span class="sourceLineNo">038</span><a name="line.38">    private static final String CLIENT_KEY_ALGO = "clientKeyAlgo";</a>
<span class="sourceLineNo">039</span><a name="line.39">    private static final String CLIENT_KEY_PASSPHRASE = "clientKeyPassphrase";</a>
<span class="sourceLineNo">040</span><a name="line.40">    private static final String CONNECTION_TIMEOUT = "connectionTimeout";</a>
<span class="sourceLineNo">041</span><a name="line.41">    private static final String HTTP_PROXY = "httpProxy";</a>
<span class="sourceLineNo">042</span><a name="line.42">    private static final String HTTPS_PROXY = "httpsProxy";</a>
<span class="sourceLineNo">043</span><a name="line.43">    private static final String LOGGING_INTERVAL = "loggingInterval";</a>
<span class="sourceLineNo">044</span><a name="line.44">    private static final String MASTER_URL = "masterUrl";</a>
<span class="sourceLineNo">045</span><a name="line.45">    private static final String NAMESPACE = "namespace";</a>
<span class="sourceLineNo">046</span><a name="line.46">    private static final String NO_PROXY = "noProxy";</a>
<span class="sourceLineNo">047</span><a name="line.47">    private static final String PASSWORD = "password";</a>
<span class="sourceLineNo">048</span><a name="line.48">    private static final String PROXY_USERNAME = "proxyUsername";</a>
<span class="sourceLineNo">049</span><a name="line.49">    private static final String PROXY_PASSWORD = "proxyPassword";</a>
<span class="sourceLineNo">050</span><a name="line.50">    private static final String REQUEST_TIMEOUT = "requestTimeout";</a>
<span class="sourceLineNo">051</span><a name="line.51">    private static final String ROLLING_TIMEOUT = "rollingTimeout";</a>
<span class="sourceLineNo">052</span><a name="line.52">    private static final String TRUST_CERTS = "trustCerts";</a>
<span class="sourceLineNo">053</span><a name="line.53">    private static final String USERNAME = "username";</a>
<span class="sourceLineNo">054</span><a name="line.54">    private static final String WATCH_RECONNECT_INTERVAL = "watchReconnectInterval";</a>
<span class="sourceLineNo">055</span><a name="line.55">    private static final String WATCH_RECONNECT_LIMIT = "watchReconnectLimit";</a>
<span class="sourceLineNo">056</span><a name="line.56"></a>
<span class="sourceLineNo">057</span><a name="line.57">    private PropertiesUtil props = PropertiesUtil.getProperties();</a>
<span class="sourceLineNo">058</span><a name="line.58">    private final Config base;</a>
<span class="sourceLineNo">059</span><a name="line.59"></a>
<span class="sourceLineNo">060</span><a name="line.60">    public KubernetesClientProperties(Config base) {</a>
<span class="sourceLineNo">061</span><a name="line.61">        this.base = base;</a>
<span class="sourceLineNo">062</span><a name="line.62">    }</a>
<span class="sourceLineNo">063</span><a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65">    public String getApiVersion() {</a>
<span class="sourceLineNo">066</span><a name="line.66">        return props.getStringProperty(PREFIXES, API_VERSION, base::getApiVersion);</a>
<span class="sourceLineNo">067</span><a name="line.67">    }</a>
<span class="sourceLineNo">068</span><a name="line.68">    public String getCaCertFile() {</a>
<span class="sourceLineNo">069</span><a name="line.69">        return props.getStringProperty(PREFIXES, CA_CERT_FILE, base::getCaCertFile);</a>
<span class="sourceLineNo">070</span><a name="line.70">    }</a>
<span class="sourceLineNo">071</span><a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72">    public String getCaCertData() {</a>
<span class="sourceLineNo">073</span><a name="line.73">        return props.getStringProperty(PREFIXES, CA_CERT_DATA, base::getCaCertData);</a>
<span class="sourceLineNo">074</span><a name="line.74">    }</a>
<span class="sourceLineNo">075</span><a name="line.75"></a>
<span class="sourceLineNo">076</span><a name="line.76">    public String getClientCertFile() {</a>
<span class="sourceLineNo">077</span><a name="line.77">        return props.getStringProperty(PREFIXES, CLIENT_CERT_FILE, base::getClientCertFile);</a>
<span class="sourceLineNo">078</span><a name="line.78">    }</a>
<span class="sourceLineNo">079</span><a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80">    public String getClientCertData() {</a>
<span class="sourceLineNo">081</span><a name="line.81">        return props.getStringProperty(PREFIXES, CLIENT_CERT_DATA, base::getClientCertData);</a>
<span class="sourceLineNo">082</span><a name="line.82">    }</a>
<span class="sourceLineNo">083</span><a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84">    public String getClientKeyFile() {</a>
<span class="sourceLineNo">085</span><a name="line.85">        return props.getStringProperty(PREFIXES, CLIENT_KEY_FILE, base::getClientKeyFile);</a>
<span class="sourceLineNo">086</span><a name="line.86">    }</a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span><a name="line.88">    public String getClientKeyData() {</a>
<span class="sourceLineNo">089</span><a name="line.89">        return props.getStringProperty(PREFIXES, CLIENT_KEY_DATA, base::getClientKeyData);</a>
<span class="sourceLineNo">090</span><a name="line.90">    }</a>
<span class="sourceLineNo">091</span><a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92">    public String getClientKeyAlgo() {</a>
<span class="sourceLineNo">093</span><a name="line.93">        return props.getStringProperty(PREFIXES, CLIENT_KEY_ALGO, base::getClientKeyAlgo);</a>
<span class="sourceLineNo">094</span><a name="line.94">    }</a>
<span class="sourceLineNo">095</span><a name="line.95"></a>
<span class="sourceLineNo">096</span><a name="line.96">    public String getClientKeyPassphrase() {</a>
<span class="sourceLineNo">097</span><a name="line.97">        return props.getStringProperty(PREFIXES, CLIENT_KEY_PASSPHRASE, base::getClientKeyPassphrase);</a>
<span class="sourceLineNo">098</span><a name="line.98">    }</a>
<span class="sourceLineNo">099</span><a name="line.99"></a>
<span class="sourceLineNo">100</span><a name="line.100">    public int getConnectionTimeout() {</a>
<span class="sourceLineNo">101</span><a name="line.101">        Duration timeout = props.getDurationProperty(PREFIXES, CONNECTION_TIMEOUT, null);</a>
<span class="sourceLineNo">102</span><a name="line.102">        if (timeout != null) {</a>
<span class="sourceLineNo">103</span><a name="line.103">            return (int) timeout.toMillis();</a>
<span class="sourceLineNo">104</span><a name="line.104">        }</a>
<span class="sourceLineNo">105</span><a name="line.105">        return base.getConnectionTimeout();</a>
<span class="sourceLineNo">106</span><a name="line.106">    }</a>
<span class="sourceLineNo">107</span><a name="line.107"></a>
<span class="sourceLineNo">108</span><a name="line.108">    public String getHttpProxy() {</a>
<span class="sourceLineNo">109</span><a name="line.109">        return props.getStringProperty(PREFIXES, HTTP_PROXY, base::getHttpProxy);</a>
<span class="sourceLineNo">110</span><a name="line.110">    }</a>
<span class="sourceLineNo">111</span><a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112">    public String getHttpsProxy() {</a>
<span class="sourceLineNo">113</span><a name="line.113">        return props.getStringProperty(PREFIXES, HTTPS_PROXY, base::getHttpsProxy);</a>
<span class="sourceLineNo">114</span><a name="line.114">    }</a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span><a name="line.116">    public int getLoggingInterval() {</a>
<span class="sourceLineNo">117</span><a name="line.117">        Duration interval = props.getDurationProperty(PREFIXES, LOGGING_INTERVAL, null);</a>
<span class="sourceLineNo">118</span><a name="line.118">        if (interval != null) {</a>
<span class="sourceLineNo">119</span><a name="line.119">            return (int) interval.toMillis();</a>
<span class="sourceLineNo">120</span><a name="line.120">        }</a>
<span class="sourceLineNo">121</span><a name="line.121">        return base.getLoggingInterval();</a>
<span class="sourceLineNo">122</span><a name="line.122">    }</a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
<span class="sourceLineNo">124</span><a name="line.124">    public String getMasterUrl() {</a>
<span class="sourceLineNo">125</span><a name="line.125">        return props.getStringProperty(PREFIXES, MASTER_URL, base::getMasterUrl);</a>
<span class="sourceLineNo">126</span><a name="line.126">    }</a>
<span class="sourceLineNo">127</span><a name="line.127"></a>
<span class="sourceLineNo">128</span><a name="line.128">    public String getNamespace() {</a>
<span class="sourceLineNo">129</span><a name="line.129">        return props.getStringProperty(PREFIXES, NAMESPACE, base::getNamespace);</a>
<span class="sourceLineNo">130</span><a name="line.130">    }</a>
<span class="sourceLineNo">131</span><a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132">    public String[] getNoProxy() {</a>
<span class="sourceLineNo">133</span><a name="line.133">        String result = props.getStringProperty(PREFIXES, NO_PROXY, null);</a>
<span class="sourceLineNo">134</span><a name="line.134">        if (result != null) {</a>
<span class="sourceLineNo">135</span><a name="line.135">            return result.replace("\\s", "").split(",");</a>
<span class="sourceLineNo">136</span><a name="line.136">        }</a>
<span class="sourceLineNo">137</span><a name="line.137">        return base.getNoProxy();</a>
<span class="sourceLineNo">138</span><a name="line.138">    }</a>
<span class="sourceLineNo">139</span><a name="line.139"></a>
<span class="sourceLineNo">140</span><a name="line.140">    public String getPassword() {</a>
<span class="sourceLineNo">141</span><a name="line.141">        return props.getStringProperty(PREFIXES, PASSWORD, base::getPassword);</a>
<span class="sourceLineNo">142</span><a name="line.142">    }</a>
<span class="sourceLineNo">143</span><a name="line.143"></a>
<span class="sourceLineNo">144</span><a name="line.144">    public String getProxyUsername() {</a>
<span class="sourceLineNo">145</span><a name="line.145">        return props.getStringProperty(PREFIXES, PROXY_USERNAME, base::getProxyUsername);</a>
<span class="sourceLineNo">146</span><a name="line.146">    }</a>
<span class="sourceLineNo">147</span><a name="line.147"></a>
<span class="sourceLineNo">148</span><a name="line.148">    public String getProxyPassword() {</a>
<span class="sourceLineNo">149</span><a name="line.149">        return props.getStringProperty(PREFIXES, PROXY_PASSWORD, base::getProxyPassword);</a>
<span class="sourceLineNo">150</span><a name="line.150">    }</a>
<span class="sourceLineNo">151</span><a name="line.151"></a>
<span class="sourceLineNo">152</span><a name="line.152">    public int getRequestTimeout() {</a>
<span class="sourceLineNo">153</span><a name="line.153">        Duration interval = props.getDurationProperty(PREFIXES, REQUEST_TIMEOUT, null);</a>
<span class="sourceLineNo">154</span><a name="line.154">        if (interval != null) {</a>
<span class="sourceLineNo">155</span><a name="line.155">            return (int) interval.toMillis();</a>
<span class="sourceLineNo">156</span><a name="line.156">        }</a>
<span class="sourceLineNo">157</span><a name="line.157">        return base.getRequestTimeout();</a>
<span class="sourceLineNo">158</span><a name="line.158">    }</a>
<span class="sourceLineNo">159</span><a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160">    public long getRollingTimeout() {</a>
<span class="sourceLineNo">161</span><a name="line.161">        Duration interval = props.getDurationProperty(PREFIXES, ROLLING_TIMEOUT, null);</a>
<span class="sourceLineNo">162</span><a name="line.162">        if (interval != null) {</a>
<span class="sourceLineNo">163</span><a name="line.163">            return interval.toMillis();</a>
<span class="sourceLineNo">164</span><a name="line.164">        }</a>
<span class="sourceLineNo">165</span><a name="line.165">        return base.getRollingTimeout();</a>
<span class="sourceLineNo">166</span><a name="line.166">    }</a>
<span class="sourceLineNo">167</span><a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168">    public Boolean isTrustCerts() {</a>
<span class="sourceLineNo">169</span><a name="line.169">        return props.getBooleanProperty(PREFIXES, TRUST_CERTS, base::isTrustCerts);</a>
<span class="sourceLineNo">170</span><a name="line.170">    }</a>
<span class="sourceLineNo">171</span><a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172">    public String getUsername() {</a>
<span class="sourceLineNo">173</span><a name="line.173">        return props.getStringProperty(PREFIXES, USERNAME, base::getUsername);</a>
<span class="sourceLineNo">174</span><a name="line.174">    }</a>
<span class="sourceLineNo">175</span><a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176">    public int getWatchReconnectInterval() {</a>
<span class="sourceLineNo">177</span><a name="line.177">        Duration interval = props.getDurationProperty(PREFIXES, WATCH_RECONNECT_INTERVAL, null);</a>
<span class="sourceLineNo">178</span><a name="line.178">        if (interval != null) {</a>
<span class="sourceLineNo">179</span><a name="line.179">            return (int) interval.toMillis();</a>
<span class="sourceLineNo">180</span><a name="line.180">        }</a>
<span class="sourceLineNo">181</span><a name="line.181">        return base.getWatchReconnectInterval();</a>
<span class="sourceLineNo">182</span><a name="line.182">    }</a>
<span class="sourceLineNo">183</span><a name="line.183"></a>
<span class="sourceLineNo">184</span><a name="line.184">    public int getWatchReconnectLimit() {</a>
<span class="sourceLineNo">185</span><a name="line.185">        Duration interval = props.getDurationProperty(PREFIXES, WATCH_RECONNECT_LIMIT, null);</a>
<span class="sourceLineNo">186</span><a name="line.186">        if (interval != null) {</a>
<span class="sourceLineNo">187</span><a name="line.187">            return (int) interval.toMillis();</a>
<span class="sourceLineNo">188</span><a name="line.188">        }</a>
<span class="sourceLineNo">189</span><a name="line.189">        return base.getWatchReconnectLimit();</a>
<span class="sourceLineNo">190</span><a name="line.190">    }</a>
<span class="sourceLineNo">191</span><a name="line.191">}</a>




























































</pre>
</div>
</body>
</html>
