azure-kusto-data
Advanced tools
Comparing version
const KustoClient = require("./index").Client; | ||
const KustoConnectionBuilder = require("./index").KustoConnectionStringBuilder; | ||
const ClientRequestProperties = require("./index").ClientRequestProperties; | ||
@@ -56,7 +57,12 @@ const pem = `-----BEGIN PRIVATE KEY----- | ||
let q = "print parse_json(\"{ 'X':1 }\"), dynamic(123),dynamic(\"123\"), \"123\", dynamic(\"foo\"), dynamic(null), dynamic({}), dynamic(\"{}\"), dynamic({ \"a\": 123 }), dynamic(''), dynamic({\"c\":[1,2,3], \"d\":{}}), dynamic([\"123\", dynamic(\"123\")])"; | ||
let props = new ClientRequestProperties(); | ||
props.setTimeout(1); | ||
client.execute("daniel", q, (err, results) => { | ||
if (err) throw new Error(err); | ||
if (err) { | ||
throw new Error(err); | ||
} | ||
console.log(JSON.stringify(results)); | ||
console.log(results.primaryResults[0].toString()); | ||
}); | ||
}, props); | ||
} | ||
@@ -63,0 +69,0 @@ |
const KustoClient = require("azure-kusto-data").Client; | ||
const KustoConnectionStringBuilder = require("azure-kusto-data").KustoConnectionStringBuilder; | ||
const ClientRequestProperties = require("azure-kusto-data").ClientRequestProperties; | ||
@@ -15,2 +16,20 @@ let clusterName = ""; | ||
console.log(results.primaryResults[0].toString()); | ||
}); | ||
}); | ||
// providing ClientRequestProperties | ||
// for a complete list of ClientRequestProperties | ||
// go to https://docs.microsoft.com/en-us/azure/kusto/api/netfx/request-properties#list-of-clientrequestproperties | ||
let clientRequestProps = new ClientRequestProperties(); | ||
const ONE_MINUTE = 1000 * 60; | ||
clientRequestProps.setOption("servertimeout", ONE_MINUTE); | ||
kustoClient.execute( | ||
"db", | ||
"TableName | limit 1", | ||
(err, results) => { | ||
if (err) throw new Error(err); | ||
console.log(JSON.stringify(results)); | ||
console.log(results.primaryResults[0].toString()); | ||
}, | ||
clientRequestProps | ||
); |
const Client = require("./source/client"); | ||
const ClientRequestProperties = require("./source/clientRequestProperties"); | ||
const KustoConnectionStringBuilder = require("./source/connectionBuilder"); | ||
module.exports = { | ||
Client, | ||
KustoConnectionStringBuilder | ||
KustoConnectionStringBuilder, | ||
ClientRequestProperties | ||
}; |
{ | ||
"name": "azure-kusto-data", | ||
"version": "0.1.4", | ||
"description": "", | ||
"version": "0.1.5", | ||
"description": "Azure Data Explorer Query SDK", | ||
"main": "index.js", | ||
@@ -6,0 +6,0 @@ "engines": { |
@@ -72,1 +72,19 @@ # Microsoft Azure Kusto Data Library for Node | ||
## Advanced Usage | ||
### ClientRequestProperties | ||
For more fine grained control, we expose `ClientRequestProperties`. | ||
```javascript | ||
const ClientRequestProperties = require("azure-kusto-data").ClientRequestProperties; | ||
const Client = require("azure-kusto-data").Client; | ||
let client = new Client("http://cluster.region.kusto.windows.net"); | ||
let clientRequestProps = new ClientRequestProperties(); | ||
clientRequestProps.setOption("servertimeout", 1000 * 60); | ||
client.executeQuery("db","Table | count", (err, results) => { console.log(results);}, clientRequestProps); | ||
``` | ||
A full list of those properties can be found at https://docs.microsoft.com/en-us/azure/kusto/api/netfx/request-properties | ||
@@ -0,1 +1,2 @@ | ||
const moment = require("moment"); | ||
const request = require("request"); | ||
@@ -6,4 +7,6 @@ const uuidv4 = require("uuid/v4"); | ||
const ConnectionStringBuilder = require("./connectionBuilder"); | ||
const ClientRequestProperties = require("./clientRequestProperties"); | ||
const pkg = require("../package.json"); | ||
module.exports = class KustoClient { | ||
@@ -21,19 +24,19 @@ constructor(kcsb) { | ||
execute(db, query, callback, options) { | ||
execute(db, query, callback, properties) { | ||
if (query.startsWith(".")) { | ||
return this.executeMgmt(db, query, callback, options); | ||
return this.executeMgmt(db, query, callback, properties); | ||
} | ||
return this.executeQuery(db, query, callback, options); | ||
return this.executeQuery(db, query, callback, properties); | ||
} | ||
executeQuery(db, query, callback, options) { | ||
return this._execute(this.endpoints.query, db, query, callback, options); | ||
executeQuery(db, query, callback, properties) { | ||
return this._execute(this.endpoints.query, db, query, callback, properties); | ||
} | ||
executeMgmt(db, query, callback, options) { | ||
return this._execute(this.endpoints.mgmt, db, query, callback, options); | ||
executeMgmt(db, query, callback, properties) { | ||
return this._execute(this.endpoints.mgmt, db, query, callback, properties); | ||
} | ||
_execute(endpoint, db, query, callback, options) { | ||
_execute(endpoint, db, query, callback, properties) { | ||
const payload = { | ||
@@ -44,33 +47,61 @@ "db": db, | ||
let timeout = null; | ||
if (properties != null) { | ||
if (properties instanceof ClientRequestProperties) { | ||
payload.properties = properties.toJson(); | ||
timeout = properties.getTimeout(); | ||
} else { | ||
timeout = properties.timeout; | ||
} | ||
} | ||
if (timeout == null) { | ||
if (endpoint == this.endpoints.mgmt) { | ||
timeout = this._getDefaultCommandTimeout(); | ||
} else { | ||
timeout = this._getDefaultQueryTimeout(); | ||
} | ||
} | ||
return this.aadHelper.getAuthHeader((err, authHeader) => { | ||
if (err) return callback(err); | ||
const headers = { | ||
"Authorization": authHeader, | ||
"Accept": "application/json", | ||
"Accept-Encoding": "gzip,deflate", | ||
"Content-Type": "application/json; charset=utf-8", | ||
"Fed": "True", | ||
"x-ms-client-version": `Kusto.Node.Client:${pkg.version}`, | ||
"x-ms-client-request-id": `KNC.execute;${uuidv4()}`, | ||
}; | ||
return this._doRequest(endpoint, payload, timeout, properties, callback , authHeader); | ||
}); | ||
} | ||
const { timeout } = options || {}; | ||
_getDefaultQueryTimeout() { | ||
return moment.duration(4.5, "minutes").asMilliseconds(); | ||
} | ||
return request({ | ||
method: "POST", | ||
url: endpoint, | ||
headers, | ||
json: payload, | ||
gzip: true, | ||
timeout | ||
}, this._getRequestCallback(options, callback) | ||
); | ||
}); | ||
_getDefaultCommandTimeout() { | ||
return moment.duration(10.5, "minutes").asMilliseconds(); | ||
} | ||
_doRequest(endpoint, payload, timeout, properties, callback, authHeader) { | ||
const headers = { | ||
"Authorization": authHeader, | ||
"Accept": "application/json", | ||
"Accept-Encoding": "gzip,deflate", | ||
"Content-Type": "application/json; charset=utf-8", | ||
"Fed": "True", | ||
"x-ms-client-version": `Kusto.Node.Client:${pkg.version}`, | ||
"x-ms-client-request-id": `KNC.execute;${uuidv4()}`, | ||
}; | ||
_getRequestCallback(options, callback) { | ||
const { raw, partial } = options || {}; | ||
return request({ | ||
method: "POST", | ||
url: endpoint, | ||
headers, | ||
json: payload, | ||
gzip: true, | ||
timeout | ||
}, this._getRequestCallback(properties, callback) | ||
); | ||
} | ||
_getRequestCallback(properties, callback) { | ||
const { raw } = properties || {}; | ||
return (error, response, body) => { | ||
@@ -93,3 +124,3 @@ if (error) return callback(error); | ||
if (kustoResponse.getErrorsCount() > 0 && !partial) { | ||
if (kustoResponse.getErrorsCount() > 0) { | ||
return callback(`Kusto request had errors. ${kustoResponse.getExceptions()}`); | ||
@@ -108,2 +139,2 @@ } | ||
} | ||
}; | ||
}; |
@@ -118,2 +118,2 @@ const KeywordMapping = Object.freeze({ | ||
} | ||
}; | ||
}; |
@@ -99,2 +99,2 @@ const moment = require("moment"); | ||
} | ||
}; | ||
}; |
@@ -116,2 +116,2 @@ const { KustoResultTable, WellKnownDataSet } = require("./models"); | ||
} | ||
}; | ||
}; |
@@ -90,2 +90,2 @@ const { URL } = require("url"); | ||
} | ||
}; | ||
}; |
38255
10.59%13
8.33%803
12.15%90
25%