D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
share
/
grafana
/
public
/
build
/
Filename :
mysqlPlugin.2f9cda55cd0819d75f95.js
back
Copy
(self.webpackChunkgrafana=self.webpackChunkgrafana||[]).push([[4251],{18735:(H,C,s)=>{"use strict";s.d(C,{d:()=>g});var o=s(27702),u=s(17312),h=s(48024),t=s(65632);const g=O=>{const{labelWidth:S,editorProps:i,showCACert:D,showKeyPair:f=!0}=O,{secureJsonFields:m}=i.options;return o.createElement(o.Fragment,null,f?o.createElement(h._,{tooltip:o.createElement("span",null,"To authenticate with an TLS/SSL client certificate, provide the client certificate here."),labelWidth:S,label:"TLS/SSL Client Certificate"},o.createElement(t.Zk,{placeholder:"Begins with -----BEGIN CERTIFICATE-----",cols:45,rows:7,isConfigured:m&&m.tlsClientCert,onChange:(0,u.fi)(i,"tlsClientCert"),onReset:()=>{(0,u.Mf)(i,"tlsClientCert")}})):null,D?o.createElement(h._,{tooltip:o.createElement("span",null,"If the selected TLS/SSL mode requires a server root certificate, provide it here."),labelWidth:S,label:"TLS/SSL Root Certificate"},o.createElement(t.Zk,{placeholder:"Begins with -----BEGIN CERTIFICATE-----",cols:45,rows:7,isConfigured:m&&m.tlsCACert,onChange:(0,u.fi)(i,"tlsCACert"),onReset:()=>{(0,u.Mf)(i,"tlsCACert")}})):null,f?o.createElement(h._,{tooltip:o.createElement("span",null,"To authenticate with a client TLS/SSL certificate, provide the key here."),labelWidth:S,label:"TLS/SSL Client Key"},o.createElement(t.Zk,{placeholder:"Begins with -----BEGIN RSA PRIVATE KEY-----",cols:45,rows:7,isConfigured:m&&m.tlsClientKey,onChange:(0,u.fi)(i,"tlsClientKey"),onReset:()=>{(0,u.Mf)(i,"tlsClientKey")}})):null)}},98534:(H,C,s)=>{"use strict";s.r(C),s.d(C,{plugin:()=>de});var o=s(68246),u=s(25789),h=s(42844),t=s(27702),g=s(66310);function O(){const e=(0,g.wW)(S);return t.createElement("div",null,t.createElement("h2",null,"MySQL cheat sheet"),"Time series:",t.createElement("ul",{className:e.ulPadding},t.createElement("li",null,"return column named time or time_sec (in UTC), as a unix time stamp or any sql native date data type. You can use the macros below."),t.createElement("li",null,"return column(s) with numeric datatype as values")),"Optional:",t.createElement("ul",{className:e.ulPadding},t.createElement("li",null,"return column named ",t.createElement("i",null,"metric")," to represent the series name."),t.createElement("li",null,"If multiple value columns are returned the metric column is used as prefix."),t.createElement("li",null,"If no column named metric is found the column name of the value column is used as series name")),t.createElement("p",null,"Resultsets of time series queries need to be sorted by time."),"Table:",t.createElement("ul",{className:e.ulPadding},t.createElement("li",null,"return any set of columns")),"Macros:",t.createElement("ul",{className:e.ulPadding},t.createElement("li",null,"$__time(column) -> UNIX_TIMESTAMP(column) as time_sec"),t.createElement("li",null,"$__timeEpoch(column) -> UNIX_TIMESTAMP(column) as time_sec"),t.createElement("li",null,"$__timeFilter(column) -> column BETWEEN FROM_UNIXTIME(1492750877) AND FROM_UNIXTIME(1492750877)"),t.createElement("li",null,"$__unixEpochFilter(column) -> time_unix_epoch > 1492750877 AND time_unix_epoch < 1492750877"),t.createElement("li",null,"$__unixEpochNanoFilter(column) -> column >= 1494410783152415214 AND column <= 1494497183142514872"),t.createElement("li",null,"$__timeGroup(column,'5m'[, fillvalue]) -> cast(cast(UNIX_TIMESTAMP(column)/(300) as signed)*300 as signed) by setting fillvalue grafana will fill in missing values according to the interval fillvalue can be either a literal value, NULL or previous; previous will fill in the previous seen value or NULL if none has been seen yet"),t.createElement("li",null,`$__timeGroupAlias(column,'5m') -> cast(cast(UNIX_TIMESTAMP(column)/(300) as signed)*300 as signed) AS "time"`),t.createElement("li",null,"$__unixEpochGroup(column,'5m') -> column DIV 300 * 300"),t.createElement("li",null,`$__unixEpochGroupAlias(column,'5m') -> column DIV 300 * 300 AS "time"`)),t.createElement("p",null,"Example of group by and order by with $__timeGroup:"),t.createElement("pre",null,t.createElement("code",null,"$__timeGroupAlias(timestamp_col, '1h'), sum(value_double) as value",t.createElement("br",null),"FROM yourtable",t.createElement("br",null),"GROUP BY 1",t.createElement("br",null),"ORDER BY 1",t.createElement("br",null))),"Or build your own conditionals using these macros which just return the values:",t.createElement("ul",{className:e.ulPadding},t.createElement("li",null,"$__timeFrom() -> FROM_UNIXTIME(1492750877)"),t.createElement("li",null,"$__timeTo() -> FROM_UNIXTIME(1492750877)"),t.createElement("li",null,"$__unixEpochFrom() -> 1492750877"),t.createElement("li",null,"$__unixEpochTo() -> 1492750877"),t.createElement("li",null,"$__unixEpochNanoFrom() -> 1494410783152415214"),t.createElement("li",null,"$__unixEpochNanoTo() -> 1494497183142514872")))}function S(e){return{ulPadding:(0,h.css)({margin:e.spacing(1,0),paddingLeft:e.spacing(5)})}}var i=s(6411),D=s(53085),f=s(1814);function m(e){const a=[];for(const n of e){let l="text";switch(n.type?.toUpperCase()){case"BOOLEAN":case"BOOL":{l="boolean";break}case"BYTES":case"VARCHAR":{l="text";break}case"FLOAT":case"FLOAT64":case"INT":case"INTEGER":case"INT64":case"NUMERIC":case"BIGNUMERIC":{l="number";break}case"DATE":{l="date";break}case"DATETIME":{l="datetime";break}case"TIME":{l="time";break}case"TIMESTAMP":{l="datetime";break}case"GEOGRAPHY":{l="text";break}default:break}a.push({...n,raqbFieldType:l,icon:Y(n.type.toUpperCase())})}return a}function Y(e){switch(e){case"TIME":case"DATETIME":case"TIMESTAMP":return"clock-nine";case"BOOLEAN":return"toggle-off";case"INTEGER":case"FLOAT":case"FLOAT64":case"INT":case"SMALLINT":case"BIGINT":case"TINYINT":case"BYTEINT":case"INT64":case"NUMERIC":case"DECIMAL":return"calculator-alt";case"CHAR":case"VARCHAR":case"STRING":case"BYTES":case"TEXT":case"TINYTEXT":case"MEDIUMTEXT":case"LONGTEXT":return"text";case"GEOGRAPHY":return"map";default:return}}var V=s(89949),F=s(60244);function x({sql:e,dataset:a,table:n}){let l="";if(!e||!(0,F.IC)(e.columns))return l;if(l+=(0,F.zE)(e.columns),a&&n&&(l+=`FROM ${a}.${n} `),e.whereString&&(l+=`WHERE ${e.whereString} `),e.groupBy?.[0]?.property.name){const r=e.groupBy.map(c=>c.property.name).filter(c=>!(0,V.isEmpty)(c));l+=`GROUP BY ${r.join(", ")} `}return e.orderBy?.property.name&&(l+=`ORDER BY ${e.orderBy.property.name} `),e.orderBy?.property.name&&e.orderByDirection&&(l+=`${e.orderByDirection} `),e.limit!==void 0&&e.limit>=0&&(l+=`LIMIT ${e.limit} `),l}function p(e){return _(e)?e:`\`${e}\``}function _(e){const a=/^[a-zA-Z_][a-zA-Z0-9_$]*$/g.test(e);return!$.includes(e.toUpperCase())&&a}function K(e){return e[0]==='"'&&e[e.length-1]==='"'?e.substring(1,e.length-1).replace(/""/g,'"'):e[0]==="`"&&e[e.length-1]==="`"?e.substring(1,e.length-1):e}function G(e){return"'"+e.replace(/'/g,"''")+"'"}const $=["ACCESSIBLE","ADD","ALL","ALTER","ANALYZE","AND","AS","ASC","ASENSITIVE","BEFORE","BETWEEN","BIGINT","BINARY","BLOB","BOTH","BY","CALL","CASCADE","CASE","CHANGE","CHAR","CHARACTER","CHECK","COLLATE","COLUMN","CONDITION","CONSTRAINT","CONTINUE","CONVERT","CREATE","CROSS","CUBE","CUME_DIST","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURSOR","DATABASE","DATABASES","DAY_HOUR","DAY_MICROSECOND","DAY_MINUTE","DAY_SECOND","DEC","DECIMAL","DECLARE","DEFAULT","DELAYED","DELETE","DENSE_RANK","DESC","DESCRIBE","DETERMINISTIC","DISTINCT","DISTINCTROW","DIV","DOUBLE","DROP","DUAL","EACH","ELSE","ELSEIF","EMPTY","ENCLOSED","ESCAPED","EXCEPT","EXISTS","EXIT","EXPLAIN","FALSE","FETCH","FIRST_VALUE","FLOAT","FLOAT4","FLOAT8","FOR","FORCE","FOREIGN","FROM","FULLTEXT","FUNCTION","GENERATED","GET","GRANT","GROUP","GROUPING","GROUPS","HAVING","HIGH_PRIORITY","HOUR_MICROSECOND","HOUR_MINUTE","HOUR_SECOND","IF","IGNORE","IN","INDEX","INFILE","INNER","INOUT","INSENSITIVE","INSERT","INT","INT1","INT2","INT3","INT4","INT8","INTEGER","INTERSECT","INTERVAL","INTO","IO_AFTER_GTIDS","IO_BEFORE_GTIDS","IS","ITERATE","JOIN","JSON_TABLE","KEY","KEYS","KILL","LAG","LAST_VALUE","LATERAL","LEAD","LEADING","LEAVE","LEFT","LIKE","LIMIT","LINEAR","LINES","LOAD","LOCALTIME","LOCALTIMESTAMP","LOCK","LONG","LONGBLOB","LONGTEXT","LOOP","LOW_PRIORITY","MASTER_BIND","MASTER_SSL_VERIFY_SERVER_CERT","MATCH","MAXVALUE","MEDIUMBLOB","MEDIUMINT","MEDIUMTEXT","MIDDLEINT","MINUTE_MICROSECOND","MINUTE_SECOND","MOD","MODIFIES","NATURAL","NOT","NO_WRITE_TO_BINLOG","NTH_VALUE","NTILE","NULL","NUMERIC","OF","ON","OPTIMIZE","OPTIMIZER_COSTS","OPTION","OPTIONALLY","OR","ORDER","OUT","OUTER","OUTFILE","OVER","PARTITION","PERCENT_RANK","PRECISION","PRIMARY","PROCEDURE","PURGE","RANGE","RANK","READ","READS","READ_WRITE","REAL","RECURSIVE","REFERENCES","REGEXP","RELEASE","RENAME","REPEAT","REPLACE","REQUIRE","RESIGNAL","RESTRICT","RETURN","REVOKE","RIGHT","RLIKE","ROW","ROWS","ROW_NUMBER","SCHEMA","SCHEMAS","SECOND_MICROSECOND","SELECT","SENSITIVE","SEPARATOR","SET","SHOW","SIGNAL","SMALLINT","SPATIAL","SPECIFIC","SQL","SQLEXCEPTION","SQLSTATE","SQLWARNING","SQL_BIG_RESULT","SQL_CALC_FOUND_ROWS","SQL_SMALL_RESULT","SSL","STARTING","STORED","STRAIGHT_JOIN","SYSTEM","TABLE","TERMINATED","THEN","TINYBLOB","TINYINT","TINYTEXT","TO","TRAILING","TRIGGER","TRUE","UNDO","UNION","UNIQUE","UNLOCK","UNSIGNED","UPDATE","USAGE","USE","USING","UTC_DATE","UTC_TIME","UTC_TIMESTAMP","VALUES","VARBINARY","VARCHAR","VARCHARACTER","VARYING","VIRTUAL","WHEN","WHERE","WHILE","WINDOW","WITH","WRITE","XOR","YEAR_MONTH","ZEROFILL"];function Q(e){return`SELECT table_name FROM information_schema.tables WHERE table_schema = ${e!==void 0?R(e):"database()"} ORDER BY table_name`}function X(){return"SELECT DISTINCT TABLE_SCHEMA from information_schema.TABLES where TABLE_TYPE != 'SYSTEM VIEW' ORDER BY TABLE_SCHEMA"}function Z(e,a){let n="SELECT column_name, data_type FROM information_schema.columns WHERE ";return n+=z(e,a),n+=" ORDER BY column_name",n}function z(e,a){let n="";if(e.includes(".")){const l=e.split(".");return n="table_schema = "+R(l[0]),n+=" AND table_name = "+R(l[1]),n}else return n=`table_schema = ${a!==void 0?R(a):"database()"} AND table_name = `+R(e),n}function R(e){return G(K(e))}var k=s(60429);const j=({getMeta:e})=>(a,n)=>({...n&&(0,k.h)(a,n),customStatementPlacement:q,customSuggestionKinds:ee(e)}),w={afterDatabase:"afterDatabase"},J={tablesWithinDatabase:"tablesWithinDatabase"},M="FROM",q=()=>[{id:w.afterDatabase,resolve:(e,a,n)=>!!(e?.is(i.iv.Delimiter,".")&&a?.value===M&&(n?.is(i.iv.IdentifierQuote)||n?.isIdentifier())&&e?.getPreviousUntil(i.iv.Keyword,[i.iv.IdentifierQuote],M)?.filter(l=>l.isIdentifier()).length===1)}],ee=e=>()=>[{id:i.is.Tables,overrideDefault:!0,suggestionsResolver:async a=>{const n=v(a.currentToken);return(await e({schema:n})).map(b(a))}},{id:i.is.Columns,overrideDefault:!0,suggestionsResolver:async a=>{const n=ne(a.currentToken),l=v(n),r=te(n);return!l||!r?[]:(await e({schema:l,table:r})).map(b(a))}},{id:J.tablesWithinDatabase,applyTo:[w.afterDatabase],suggestionsResolver:async a=>{const n=v(a.currentToken);return(await e({schema:n})).map(b(a))}}];function b(e){return function(a){return{label:a.name,insertText:a.completion??a.name,command:{id:"editor.action.triggerSuggest",title:""},kind:i.cm.Field,sortText:i.G8.High,range:{...e.range,startColumn:e.range.endColumn,endColumn:e.range.endColumn}}}}function v(e){if(e?.isIdentifier()&&e.value[e.value.length-1]!==".")return e.value;if(e?.is(i.iv.Delimiter,"."))return e.getPreviousOfType(i.iv.Identifier)?.value;if(e?.is(i.iv.IdentifierQuote))return e.getPreviousOfType(i.iv.Identifier)?.value||e.getNextOfType(i.iv.Identifier)?.value}function te(e){return e?.getNextOfType(i.iv.Identifier)?.value}const ae=e=>(e?.getPreviousOfType(i.iv.Keyword,"SELECT")??null)?.getNextOfType(i.iv.Keyword,M),ne=e=>{const n=ae(e)?.getNextOfType(i.iv.Identifier);return n?.isKeyword()&&n.next?.is(i.iv.Parenthesis,"(")?null:n};class le extends D.D{constructor(a){super(a),this.instanceSettings=a}getQueryModel(){return{quoteLiteral:G}}getSqlLanguageDefinition(){if(this.sqlLanguageDefinition!==void 0)return this.sqlLanguageDefinition;const a={getMeta:n=>this.fetchMeta(n)};return this.sqlLanguageDefinition={id:"mysql",completionProvider:j(a),formatter:f._},this.sqlLanguageDefinition}async fetchDatasets(){return(await this.runSql(X(),{refId:"datasets"})).map(n=>p(n[0]))}async fetchTables(a){return(await this.runSql(Q(a),{refId:"tables"})).map(l=>p(l[0]))}async fetchFields(a){if(!a.dataset||!a.table)return[];const n=Z(a.table,a.dataset),r=(await this.runSql(n,{refId:"fields"})).map(c=>({name:c[0],text:c[0],value:p(c[0]),type:c[1],label:c[0]}));return m(r)}async fetchMeta(a){const n=this.instanceSettings.jsonData.database;return!a?.schema&&n?(await this.fetchTables(n)).map(r=>({name:r,completion:`${n}.${r}`,kind:i.cm.Class})):!a?.schema&&!n?(await this.fetchDatasets()).map(r=>({name:r,completion:`${r}.`,kind:i.cm.Module})):!a?.table&&(!n||a?.schema)?(await this.fetchTables(a?.schema)).map(r=>({name:r,completion:r,kind:i.cm.Class})):a?.table&&a.schema?(await this.fetchFields({dataset:a.schema,table:a.table})).map(r=>({name:r.name,completion:r.value,kind:i.cm.Field})):[]}getDB(){return this.db!==void 0?this.db:{datasets:()=>this.fetchDatasets(),tables:a=>this.fetchTables(a),fields:a=>this.fetchFields(a),validateQuery:(a,n)=>Promise.resolve({query:a,error:"",isError:!1,isValid:!0}),dsID:()=>this.id,toRawSql:x,functions:()=>["VARIANCE","STDDEV"],getEditorLanguageDefinition:()=>this.getSqlLanguageDefinition()}}}var d=s(17312),y=s(5229),E=s(48024),A=s(1128),W=s(71107),se=s(43656),N=s(42074),ie=s(79510),re=s(63439),oe=s(9848),ce=s(12308),Ee=s(77553),ue=s(18735),me=s(10467);const Te=e=>{const{options:a,onOptionsChange:n}=e,l=a.jsonData;(0,me.D)(e);const r=()=>{(0,d.Mf)(e,"password")},c=P=>B=>{n({...a,[P]:B.currentTarget.value})},L=P=>B=>{(0,d.tp)(e,P,B.currentTarget.checked)},T=15,I=25,U=40;return t.createElement(t.Fragment,null,t.createElement(y.C,{label:"MySQL Connection",width:400},t.createElement(E._,{labelWidth:T,label:"Host"},t.createElement(A.I,{width:U,name:"host",type:"text",value:a.url||"",placeholder:"localhost:3306",onChange:c("url")})),t.createElement(E._,{labelWidth:T,label:"Database"},t.createElement(A.I,{width:U,name:"database",value:l.database||"",placeholder:"database name",onChange:(0,d._R)(e,"database")})),t.createElement(W.Z,null,t.createElement(E._,{labelWidth:T,label:"User"},t.createElement(A.I,{width:T,value:a.user||"",placeholder:"user",onChange:c("user")})),t.createElement(E._,{labelWidth:T-5,label:"Password"},t.createElement(se.m4,{width:T,placeholder:"Password",isConfigured:a.secureJsonFields&&a.secureJsonFields.password,onReset:r,onBlur:(0,d.fi)(e,"password")}))),t.createElement(E._,{tooltip:t.createElement("span",null,"Specify the time zone used in the database session, e.g. ",t.createElement("code",null,"Europe/Berlin")," or",t.createElement("code",null,"+02:00"),". This is necessary, if the timezone of the database (or the host of the database) is set to something other than UTC. The value is set in the session with",t.createElement("code",null,"SET time_zone='...'"),". If you leave this field empty, the timezone is not updated. You can find more information in the MySQL documentation."),label:"Session timezone",labelWidth:I},t.createElement(A.I,{width:U-5,value:l.timezone||"",onChange:(0,d._R)(e,"timezone"),placeholder:"(default)"})),t.createElement(W.Z,null,t.createElement(E._,{labelWidth:I,tooltip:"Enables TLS authentication using client cert configured in secure json data.",htmlFor:"tlsAuth",label:"Use TLS Client Auth"},t.createElement(N.x,{id:"tlsAuth",onChange:L("tlsAuth"),value:l.tlsAuth||!1})),t.createElement(E._,{labelWidth:I,tooltip:"Needed for verifing self-signed TLS Certs.",htmlFor:"tlsCaCert",label:"With CA Cert"},t.createElement(N.x,{id:"tlsCaCert",onChange:L("tlsAuthWithCACert"),value:l.tlsAuthWithCACert||!1}))),t.createElement(E._,{labelWidth:I,tooltip:"When enabled, skips verification of the MySql server's TLS certificate chain and host name.",htmlFor:"skipTLSVerify",label:"Skip TLS Verification"},t.createElement(N.x,{id:"skipTLSVerify",onChange:L("tlsSkipVerify"),value:l.tlsSkipVerify||!1})),t.createElement(E._,{labelWidth:I,tooltip:t.createElement("span",null,"Allows using the cleartext client side plugin if required by an account, such as one defined with the PAM authentication plugin. Sending passwords in clear text may be a security problem in some configurations. To avoid problems if there is any possibility that the password would be intercepted, clients should connect to MySQL Server using a method that protects the password. Possibilities include TLS / SSL, IPsec, or a private network."),htmlFor:"allowCleartextPasswords",label:"Allow Cleartext Passwords"},t.createElement(N.x,{id:"allowCleartextPasswords",onChange:L("allowCleartextPasswords"),value:l.allowCleartextPasswords||!1}))),ce.config.secureSocksDSProxyEnabled&&t.createElement(ie.i,{options:a,onOptionsChange:n}),l.tlsAuth||l.tlsAuthWithCACert?t.createElement(y.C,{label:"TLS/SSL Auth Details"},t.createElement(ue.d,{showCACert:l.tlsAuthWithCACert,showKeyPair:l.tlsAuth,editorProps:e,labelWidth:25})):null,t.createElement(Ee.K,{labelWidth:T,options:a,onOptionsChange:n}),t.createElement(y.C,{label:"MySQL details"},t.createElement(E._,{tooltip:t.createElement("span",null,"A lower limit for the auto group by time interval. Recommended to be set to write frequency, for example",t.createElement("code",null,"1m")," if your data is written every minute."),labelWidth:I,label:"Min time interval"},t.createElement(A.I,{placeholder:"1m",value:l.timeInterval||"",onChange:(0,d._R)(e,"timeInterval")}))),t.createElement(re.b,{title:"User Permission",severity:"info"},"The database user should only be granted SELECT permissions on the specified database & tables you want to query. Grafana does not validate that queries are safe so queries can contain any SQL statement. For example, statements like ",t.createElement("code",null,"USE otherdb;")," and ",t.createElement("code",null,"DROP TABLE user;")," would be executed. To protect against this we ",t.createElement("strong",null,"Highly")," recommend you create a specific MySQL user with restricted permissions. Check out the"," ",t.createElement(oe.r,{rel:"noreferrer",target:"_blank",href:"http://docs.grafana.org/features/datasources/mysql/"},"MySQL Data Source Docs")," ","for more information."))},de=new o.hf(le).setQueryEditor(u.M).setQueryEditorHelp(O).setConfigEditor(Te)},89818:()=>{},45399:()=>{}}]); //# sourceMappingURL=mysqlPlugin.2f9cda55cd0819d75f95.js.map