@bitblit/ratchet-aws-node-only 4.0.419-alpha → 4.0.421-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/athena/alb-athena-log-ratchet.d.ts +56 -0
- package/lib/athena/alb-athena-log-ratchet.js +156 -0
- package/lib/athena/alb-athena-log-ratchet.js.map +1 -0
- package/lib/athena/athena-ratchet.d.ts +15 -0
- package/lib/athena/athena-ratchet.js +148 -0
- package/lib/athena/athena-ratchet.js.map +1 -0
- package/lib/athena/index.d.ts +2 -0
- package/lib/athena/index.js +3 -0
- package/lib/athena/index.js.map +1 -0
- package/lib/build/index.d.ts +1 -0
- package/lib/build/index.js +2 -0
- package/lib/build/index.js.map +1 -0
- package/lib/build/ratchet-aws-node-only-info.d.ts +5 -0
- package/lib/build/ratchet-aws-node-only-info.js +15 -0
- package/lib/build/ratchet-aws-node-only-info.js.map +1 -0
- package/lib/cli/dynamo-exporter.d.ts +12 -0
- package/lib/cli/dynamo-exporter.js +77 -0
- package/lib/cli/dynamo-exporter.js.map +1 -0
- package/lib/cli/index.d.ts +4 -0
- package/lib/cli/index.js +5 -0
- package/lib/cli/index.js.map +1 -0
- package/lib/cli/ratchet-cli-handler.d.ts +6 -0
- package/lib/cli/ratchet-cli-handler.js +16 -0
- package/lib/cli/ratchet-cli-handler.js.map +1 -0
- package/lib/cli/site-uploader/site-uploader.d.ts +12 -0
- package/lib/cli/site-uploader/site-uploader.js +116 -0
- package/lib/cli/site-uploader/site-uploader.js.map +1 -0
- package/lib/cli/start-instance-and-ssh.d.ts +13 -0
- package/lib/cli/start-instance-and-ssh.js +52 -0
- package/lib/cli/start-instance-and-ssh.js.map +1 -0
- package/lib/ec2/ec2-instance-util.d.ts +8 -0
- package/lib/ec2/ec2-instance-util.js +47 -0
- package/lib/ec2/ec2-instance-util.js.map +1 -0
- package/lib/ec2/index.d.ts +1 -0
- package/lib/ec2/index.js +2 -0
- package/lib/ec2/index.js.map +1 -0
- package/lib/mail/inbound/email-to-db-insert-processor.d.ts +10 -0
- package/lib/mail/inbound/email-to-db-insert-processor.js +90 -0
- package/lib/mail/inbound/email-to-db-insert-processor.js.map +1 -0
- package/lib/mail/inbound/inbound-email-ratchet.d.ts +9 -0
- package/lib/mail/inbound/inbound-email-ratchet.js +42 -0
- package/lib/mail/inbound/inbound-email-ratchet.js.map +1 -0
- package/lib/mail/inbound/parsed-email-processor.d.ts +5 -0
- package/lib/mail/inbound/parsed-email-processor.js +2 -0
- package/lib/mail/inbound/parsed-email-processor.js.map +1 -0
- package/lib/mail/inbound/sample-email-processor.d.ts +6 -0
- package/lib/mail/inbound/sample-email-processor.js +9 -0
- package/lib/mail/inbound/sample-email-processor.js.map +1 -0
- package/lib/mail/index.d.ts +4 -0
- package/lib/mail/index.js +5 -0
- package/lib/mail/index.js.map +1 -0
- package/lib/s3/index.d.ts +6 -0
- package/lib/s3/index.js +7 -0
- package/lib/s3/index.js.map +1 -0
- package/lib/s3/s3-cache-to-local-disk-ratchet.d.ts +17 -0
- package/lib/s3/s3-cache-to-local-disk-ratchet.js +106 -0
- package/lib/s3/s3-cache-to-local-disk-ratchet.js.map +1 -0
- package/lib/s3/s3-synced-file/s3-synced-file-config-init-mode.d.ts +4 -0
- package/lib/s3/s3-synced-file/s3-synced-file-config-init-mode.js +6 -0
- package/lib/s3/s3-synced-file/s3-synced-file-config-init-mode.js.map +1 -0
- package/lib/s3/s3-synced-file/s3-synced-file-config.d.ts +15 -0
- package/lib/s3/s3-synced-file/s3-synced-file-config.js +2 -0
- package/lib/s3/s3-synced-file/s3-synced-file-config.js.map +1 -0
- package/lib/s3/s3-synced-file/s3-synced-file-optimization.d.ts +3 -0
- package/lib/s3/s3-synced-file/s3-synced-file-optimization.js +5 -0
- package/lib/s3/s3-synced-file/s3-synced-file-optimization.js.map +1 -0
- package/lib/s3/s3-synced-file/s3-synced-file-remote-backup-mode.d.ts +4 -0
- package/lib/s3/s3-synced-file/s3-synced-file-remote-backup-mode.js +6 -0
- package/lib/s3/s3-synced-file/s3-synced-file-remote-backup-mode.js.map +1 -0
- package/lib/s3/s3-synced-file/s3-synced-file.d.ts +34 -0
- package/lib/s3/s3-synced-file/s3-synced-file.js +218 -0
- package/lib/s3/s3-synced-file/s3-synced-file.js.map +1 -0
- package/package.json +72 -15
- package/lib/index.mjs +0 -2
- package/lib/types.d.ts +0 -231
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ReadStream } from 'fs';
|
|
2
|
+
import { AthenaRatchet } from './athena-ratchet.js';
|
|
3
|
+
import { S3Client } from '@aws-sdk/client-s3';
|
|
4
|
+
export declare class AlbAthenaLogRatchet {
|
|
5
|
+
private athena;
|
|
6
|
+
private athenaTableName;
|
|
7
|
+
constructor(athena: AthenaRatchet, athenaTableName: string);
|
|
8
|
+
updatePartitions(rootPath: string, s3: S3Client, startTimeEpochMS?: number, endTimeEpochMS?: number): Promise<string[]>;
|
|
9
|
+
createTable(rootPath: string, replaceIfPresent?: boolean): Promise<boolean>;
|
|
10
|
+
static readLogObjectsFromCsvStream(readStream: ReadStream): Promise<AlbLogRecord[]>;
|
|
11
|
+
static readLogObjectsFromFile(fileName: string): Promise<AlbLogRecord[]>;
|
|
12
|
+
fetchAlbLogRecords(qry: AlbLogRecordQuery): Promise<AlbLogRecord[]>;
|
|
13
|
+
fetchAlbLogRecordsToFile(qry: AlbLogRecordQuery, outputFileName?: string): Promise<string>;
|
|
14
|
+
static readonly CREATE_TABLE_STATEMENT: string;
|
|
15
|
+
}
|
|
16
|
+
export interface AlbLogRecordQuery {
|
|
17
|
+
startTimeEpochMS?: number;
|
|
18
|
+
endTimeEpochMS?: number;
|
|
19
|
+
requestUrlFilter?: string;
|
|
20
|
+
limit?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface AlbLogRecord {
|
|
23
|
+
type: string;
|
|
24
|
+
time: string;
|
|
25
|
+
elb: string;
|
|
26
|
+
client_ip: string;
|
|
27
|
+
client_port: string;
|
|
28
|
+
target_ip: string;
|
|
29
|
+
target_port: string;
|
|
30
|
+
request_processing_time: string;
|
|
31
|
+
target_processing_time: string;
|
|
32
|
+
response_processing_time: string;
|
|
33
|
+
elb_status_code: string;
|
|
34
|
+
target_status_code: string;
|
|
35
|
+
received_bytes: string;
|
|
36
|
+
sent_bytes: string;
|
|
37
|
+
request_verb: string;
|
|
38
|
+
request_url: string;
|
|
39
|
+
request_proto: string;
|
|
40
|
+
user_agent: string;
|
|
41
|
+
ssl_cipher: string;
|
|
42
|
+
ssl_protocol: string;
|
|
43
|
+
target_group_arn: string;
|
|
44
|
+
trace_id: string;
|
|
45
|
+
domain_name: string;
|
|
46
|
+
chosen_cert_arn: string;
|
|
47
|
+
matched_rule_priority: string;
|
|
48
|
+
request_creation_time: string;
|
|
49
|
+
actions_executed: string;
|
|
50
|
+
redirect_url: string;
|
|
51
|
+
lambda_error_reason: string;
|
|
52
|
+
target_port_list: string;
|
|
53
|
+
target_status_code_list: string;
|
|
54
|
+
new_field: string;
|
|
55
|
+
date_utc_partition: string;
|
|
56
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { Logger } from '@bitblit/ratchet-common/logger/logger';
|
|
4
|
+
import { RequireRatchet } from '@bitblit/ratchet-common/lang/require-ratchet';
|
|
5
|
+
import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
|
|
6
|
+
import { EsmRatchet } from '@bitblit/ratchet-common/lang/esm-ratchet';
|
|
7
|
+
import { CsvRatchet } from '@bitblit/ratchet-node-only/csv/csv-ratchet';
|
|
8
|
+
import { S3Ratchet } from '@bitblit/ratchet-aws/s3/s3-ratchet';
|
|
9
|
+
export class AlbAthenaLogRatchet {
|
|
10
|
+
athena;
|
|
11
|
+
athenaTableName;
|
|
12
|
+
constructor(athena, athenaTableName) {
|
|
13
|
+
this.athena = athena;
|
|
14
|
+
this.athenaTableName = athenaTableName;
|
|
15
|
+
RequireRatchet.notNullOrUndefined(athena, 'athena');
|
|
16
|
+
RequireRatchet.notNullOrUndefined(StringRatchet.trimToNull(athenaTableName), 'athenaTableName');
|
|
17
|
+
}
|
|
18
|
+
async updatePartitions(rootPath, s3, startTimeEpochMS = new Date().getTime() - 1000 * 60 * 60 * 24, endTimeEpochMS = new Date().getTime()) {
|
|
19
|
+
RequireRatchet.true(S3Ratchet.checkS3UrlForValidity(rootPath), 'root path not valid');
|
|
20
|
+
RequireRatchet.notNullOrUndefined(s3, 's3');
|
|
21
|
+
Logger.info('Updating partitions for %s from %s', this.athenaTableName, rootPath);
|
|
22
|
+
const bucketName = S3Ratchet.extractBucketFromURL(rootPath);
|
|
23
|
+
const rootKey = S3Ratchet.extractKeyFromURL(rootPath);
|
|
24
|
+
let current = startTimeEpochMS;
|
|
25
|
+
const clauses = [];
|
|
26
|
+
while (current < endTimeEpochMS) {
|
|
27
|
+
const dateUtcVal = new Date(current).toISOString().substring(0, 10);
|
|
28
|
+
Logger.info('d:%s', dateUtcVal);
|
|
29
|
+
const dateParts = dateUtcVal.split('-');
|
|
30
|
+
clauses.push("PARTITION (date_utc_partition='" +
|
|
31
|
+
dateUtcVal +
|
|
32
|
+
"') LOCATION '" +
|
|
33
|
+
rootPath +
|
|
34
|
+
'/' +
|
|
35
|
+
dateParts[0] +
|
|
36
|
+
'/' +
|
|
37
|
+
dateParts[1] +
|
|
38
|
+
'/' +
|
|
39
|
+
dateParts[2] +
|
|
40
|
+
"'");
|
|
41
|
+
current += 1000 * 60 * 60 * 24;
|
|
42
|
+
}
|
|
43
|
+
if (clauses.length > 0) {
|
|
44
|
+
const stmt = 'ALTER TABLE ' + this.athenaTableName + ' ADD IF NOT EXISTS \n' + clauses.join('\n');
|
|
45
|
+
await this.athena.runQueryToObjects(stmt);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
Logger.warn('Not updating partitions - no time between time clauses');
|
|
49
|
+
}
|
|
50
|
+
return clauses;
|
|
51
|
+
}
|
|
52
|
+
async createTable(rootPath, replaceIfPresent = false) {
|
|
53
|
+
RequireRatchet.true(S3Ratchet.checkS3UrlForValidity(rootPath), 'root path not valid');
|
|
54
|
+
let rval = false;
|
|
55
|
+
Logger.info('Creating ALB table %s', this.athenaTableName);
|
|
56
|
+
if (replaceIfPresent) {
|
|
57
|
+
Logger.info('Replace if present specified, removed old table');
|
|
58
|
+
try {
|
|
59
|
+
await this.athena.runQueryToObjects('drop table ' + this.athenaTableName);
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
Logger.info('Drop error : %j', err);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
let tableCreateQry = readFileSync(path.join(EsmRatchet.fetchDirName(import.meta.url), '../static/albAthenaTableCreate.txt')).toString();
|
|
66
|
+
tableCreateQry = StringRatchet.simpleTemplateFill(tableCreateQry, { TABLE_NAME: this.athenaTableName, ALB_LOG_ROOT: rootPath }, true);
|
|
67
|
+
Logger.info('Creating table with %s', tableCreateQry);
|
|
68
|
+
try {
|
|
69
|
+
await this.athena.runQueryToObjects(tableCreateQry);
|
|
70
|
+
rval = true;
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
Logger.error('Error creating table : %s', err);
|
|
74
|
+
}
|
|
75
|
+
return rval;
|
|
76
|
+
}
|
|
77
|
+
static async readLogObjectsFromCsvStream(readStream) {
|
|
78
|
+
return CsvRatchet.streamParse(readStream, (p) => p);
|
|
79
|
+
}
|
|
80
|
+
static async readLogObjectsFromFile(fileName) {
|
|
81
|
+
return CsvRatchet.fileParse(fileName, (p) => p);
|
|
82
|
+
}
|
|
83
|
+
async fetchAlbLogRecords(qry) {
|
|
84
|
+
const tempFile = await this.fetchAlbLogRecordsToFile(qry);
|
|
85
|
+
return AlbAthenaLogRatchet.readLogObjectsFromFile(tempFile);
|
|
86
|
+
}
|
|
87
|
+
async fetchAlbLogRecordsToFile(qry, outputFileName = null) {
|
|
88
|
+
Logger.info('Querying %s : %j', this.athenaTableName, qry);
|
|
89
|
+
let qrySt = 'select * from ' + this.athenaTableName + ' where 1=1 ';
|
|
90
|
+
if (qry.startTimeEpochMS) {
|
|
91
|
+
if (qry.startTimeEpochMS) {
|
|
92
|
+
qrySt += " AND time >= '" + new Date(qry.startTimeEpochMS).toISOString() + "'";
|
|
93
|
+
qrySt += " AND date_utc_partition >='" + new Date(qry.startTimeEpochMS).toISOString().substring(0, 10) + "'";
|
|
94
|
+
}
|
|
95
|
+
if (qry.endTimeEpochMS) {
|
|
96
|
+
qrySt += " AND time < '" + new Date(qry.endTimeEpochMS).toISOString() + "'";
|
|
97
|
+
qrySt += " AND date_utc_partition <='" + new Date(qry.endTimeEpochMS).toISOString().substring(0, 10) + "'";
|
|
98
|
+
}
|
|
99
|
+
if (qry.requestUrlFilter) {
|
|
100
|
+
qrySt += " AND request_url LIKE '" + qry.requestUrlFilter + "'";
|
|
101
|
+
}
|
|
102
|
+
if (qry.limit) {
|
|
103
|
+
qrySt += ' LIMIT ' + qry.limit;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const result = await this.athena.runQueryToFile(qrySt, null, outputFileName);
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
static CREATE_TABLE_STATEMENT = 'CREATE EXTERNAL TABLE IF NOT EXISTS `{{TABLE NAME}}`(\n' +
|
|
110
|
+
" `type` string COMMENT '',\n" +
|
|
111
|
+
" `time` string COMMENT '',\n" +
|
|
112
|
+
" `elb` string COMMENT '',\n" +
|
|
113
|
+
" `client_ip` string COMMENT '',\n" +
|
|
114
|
+
" `client_port` int COMMENT '',\n" +
|
|
115
|
+
" `target_ip` string COMMENT '',\n" +
|
|
116
|
+
" `target_port` int COMMENT '',\n" +
|
|
117
|
+
" `request_processing_time` double COMMENT '',\n" +
|
|
118
|
+
" `target_processing_time` double COMMENT '',\n" +
|
|
119
|
+
" `response_processing_time` double COMMENT '',\n" +
|
|
120
|
+
" `elb_status_code` string COMMENT '',\n" +
|
|
121
|
+
" `target_status_code` string COMMENT '',\n" +
|
|
122
|
+
" `received_bytes` bigint COMMENT '',\n" +
|
|
123
|
+
" `sent_bytes` bigint COMMENT '',\n" +
|
|
124
|
+
" `request_verb` string COMMENT '',\n" +
|
|
125
|
+
" `request_url` string COMMENT '',\n" +
|
|
126
|
+
" `request_proto` string COMMENT '',\n" +
|
|
127
|
+
" `user_agent` string COMMENT '',\n" +
|
|
128
|
+
" `ssl_cipher` string COMMENT '',\n" +
|
|
129
|
+
" `ssl_protocol` string COMMENT '',\n" +
|
|
130
|
+
" `target_group_arn` string COMMENT '',\n" +
|
|
131
|
+
" `trace_id` string COMMENT '',\n" +
|
|
132
|
+
" `domain_name` string COMMENT '',\n" +
|
|
133
|
+
" `chosen_cert_arn` string COMMENT '',\n" +
|
|
134
|
+
" `matched_rule_priority` string COMMENT '',\n" +
|
|
135
|
+
" `request_creation_time` string COMMENT '',\n" +
|
|
136
|
+
" `actions_executed` string COMMENT '',\n" +
|
|
137
|
+
" `redirect_url` string COMMENT '',\n" +
|
|
138
|
+
" `lambda_error_reason` string COMMENT '',\n" +
|
|
139
|
+
" `target_port_list` string COMMENT '',\n" +
|
|
140
|
+
" `target_status_code_list` string COMMENT '',\n" +
|
|
141
|
+
" `new_field` string COMMENT '')\n" +
|
|
142
|
+
'PARTITIONED BY (\n' +
|
|
143
|
+
' `date_utc_partition` string\n' +
|
|
144
|
+
')\n' +
|
|
145
|
+
'ROW FORMAT SERDE\n' +
|
|
146
|
+
" 'org.apache.hadoop.hive.serde2.RegexSerDe'\n" +
|
|
147
|
+
'WITH SERDEPROPERTIES (\n' +
|
|
148
|
+
' \'input.regex\'=\'([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \\"([^ ]*) ([^ ]*) (- |[^ ]*)\\" \\"([^\\"]*)\\" ([A-Z0-9-]+) ([A-Za-z0-9.-]*) ([^ ]*) \\"([^\\"]*)\\" \\"([^\\"]*)\\" \\"([^\\"]*)\\" ([-.0-9]*) ([^ ]*) \\"([^\\"]*)\\" \\"([^\\"]*)\\" \\"([^ ]*)\\" \\"([^s]+)\\" \\"([^s]+)\\"(.*)\')\n' +
|
|
149
|
+
'STORED AS INPUTFORMAT\n' +
|
|
150
|
+
" 'org.apache.hadoop.mapred.TextInputFormat'\n" +
|
|
151
|
+
'OUTPUTFORMAT\n' +
|
|
152
|
+
" 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'\n" +
|
|
153
|
+
'LOCATION\n' +
|
|
154
|
+
" '{{ALB_LOG_ROOT}}'\n";
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=alb-athena-log-ratchet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alb-athena-log-ratchet.js","sourceRoot":"","sources":["../../src/athena/alb-athena-log-ratchet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AthenaClient, NamedQuery, Row } from '@aws-sdk/client-athena';
|
|
2
|
+
import { S3Client } from '@aws-sdk/client-s3';
|
|
3
|
+
export declare class AthenaRatchet {
|
|
4
|
+
private athena;
|
|
5
|
+
private s3;
|
|
6
|
+
private outputLocation;
|
|
7
|
+
constructor(athena: AthenaClient, s3: S3Client, outputLocation: string);
|
|
8
|
+
static athenaRowsToObject<T>(input: Row[]): T[];
|
|
9
|
+
fetchQueryIds(): Promise<string[]>;
|
|
10
|
+
listQueries(): Promise<NamedQuery[]>;
|
|
11
|
+
findQueryByName(name: string): Promise<NamedQuery>;
|
|
12
|
+
runQueryToObjects<T>(queryIn: string, queryParams?: any, pingTimeMS?: number): Promise<T[]>;
|
|
13
|
+
runQueryToFile(queryIn: string, queryParams?: any, targetDataFileIn?: string, pingTimeMS?: number): Promise<string>;
|
|
14
|
+
private runQueryToOutputLocation;
|
|
15
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { GetNamedQueryCommand, GetQueryExecutionCommand, ListNamedQueriesCommand, StartQueryExecutionCommand, } from '@aws-sdk/client-athena';
|
|
2
|
+
import { GetObjectCommand } from '@aws-sdk/client-s3';
|
|
3
|
+
import tmp from 'tmp';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import { RequireRatchet } from '@bitblit/ratchet-common/lang/require-ratchet';
|
|
6
|
+
import { Logger } from '@bitblit/ratchet-common/logger/logger';
|
|
7
|
+
import { CsvRatchet } from '@bitblit/ratchet-node-only/csv/csv-ratchet';
|
|
8
|
+
import { PromiseRatchet } from '@bitblit/ratchet-common/lang/promise-ratchet';
|
|
9
|
+
import { StopWatch } from '@bitblit/ratchet-common/lang/stop-watch';
|
|
10
|
+
import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
|
|
11
|
+
export class AthenaRatchet {
|
|
12
|
+
athena;
|
|
13
|
+
s3;
|
|
14
|
+
outputLocation;
|
|
15
|
+
constructor(athena, s3, outputLocation) {
|
|
16
|
+
this.athena = athena;
|
|
17
|
+
this.s3 = s3;
|
|
18
|
+
this.outputLocation = outputLocation;
|
|
19
|
+
RequireRatchet.notNullOrUndefined(athena);
|
|
20
|
+
RequireRatchet.notNullOrUndefined(s3);
|
|
21
|
+
RequireRatchet.notNullOrUndefined(outputLocation);
|
|
22
|
+
RequireRatchet.true(outputLocation.startsWith('s3://'));
|
|
23
|
+
}
|
|
24
|
+
static athenaRowsToObject(input) {
|
|
25
|
+
const colNames = input[0].Data.map((d) => d.VarCharValue);
|
|
26
|
+
const temp = input.slice(1);
|
|
27
|
+
const rval = temp.map((t) => {
|
|
28
|
+
const newItem = {};
|
|
29
|
+
for (let i = 0; i < t.Data.length; i++) {
|
|
30
|
+
newItem[colNames[i]] = t.Data[i].VarCharValue;
|
|
31
|
+
}
|
|
32
|
+
return newItem;
|
|
33
|
+
});
|
|
34
|
+
return rval;
|
|
35
|
+
}
|
|
36
|
+
async fetchQueryIds() {
|
|
37
|
+
const params = {
|
|
38
|
+
NextToken: null,
|
|
39
|
+
};
|
|
40
|
+
let rval = [];
|
|
41
|
+
let next = null;
|
|
42
|
+
do {
|
|
43
|
+
next = await this.athena.send(new ListNamedQueriesCommand(params));
|
|
44
|
+
rval = rval.concat(next.NamedQueryIds);
|
|
45
|
+
params.NextToken = next.NextToken;
|
|
46
|
+
} while (params.NextToken);
|
|
47
|
+
return rval;
|
|
48
|
+
}
|
|
49
|
+
async listQueries() {
|
|
50
|
+
const rval = [];
|
|
51
|
+
const ids = await this.fetchQueryIds();
|
|
52
|
+
Logger.debug('Finding %d items', ids.length);
|
|
53
|
+
for (let i = 0; i < ids.length; i++) {
|
|
54
|
+
const params = {
|
|
55
|
+
NamedQueryId: ids[i],
|
|
56
|
+
};
|
|
57
|
+
const val = await this.athena.send(new GetNamedQueryCommand(params));
|
|
58
|
+
rval.push(val.NamedQuery);
|
|
59
|
+
}
|
|
60
|
+
return rval;
|
|
61
|
+
}
|
|
62
|
+
async findQueryByName(name) {
|
|
63
|
+
const all = await this.listQueries();
|
|
64
|
+
const rval = all.find((a) => a.Name.toLowerCase() == name.toLowerCase());
|
|
65
|
+
return rval;
|
|
66
|
+
}
|
|
67
|
+
async runQueryToObjects(queryIn, queryParams = {}, pingTimeMS = 2000) {
|
|
68
|
+
Logger.info('Running query to objects');
|
|
69
|
+
const outputLoc = await this.runQueryToOutputLocation(queryIn, queryParams, pingTimeMS);
|
|
70
|
+
Logger.info('Query succeeded, processing file from %s', outputLoc);
|
|
71
|
+
const bucketName = outputLoc.substring(5, outputLoc.indexOf('/', 5));
|
|
72
|
+
const obKey = outputLoc.substring(outputLoc.indexOf('/', 5) + 1);
|
|
73
|
+
const req = {
|
|
74
|
+
Bucket: bucketName,
|
|
75
|
+
Key: obKey,
|
|
76
|
+
};
|
|
77
|
+
const getFileOut = await this.s3.send(new GetObjectCommand(req));
|
|
78
|
+
const bodyAsString = await getFileOut.Body.transformToString();
|
|
79
|
+
const rval = await CsvRatchet.stringParse(bodyAsString, (p) => {
|
|
80
|
+
return p;
|
|
81
|
+
}, { columns: true, skip_empty_lines: true });
|
|
82
|
+
return rval;
|
|
83
|
+
}
|
|
84
|
+
async runQueryToFile(queryIn, queryParams = {}, targetDataFileIn = null, pingTimeMS = 2000) {
|
|
85
|
+
Logger.info('Running query to file');
|
|
86
|
+
const outputLoc = await this.runQueryToOutputLocation(queryIn, queryParams, pingTimeMS);
|
|
87
|
+
Logger.info('Query succeeded, pulling file from %s', outputLoc);
|
|
88
|
+
const bucketName = outputLoc.substring(5, outputLoc.indexOf('/', 5));
|
|
89
|
+
const obKey = outputLoc.substring(outputLoc.indexOf('/', 5) + 1);
|
|
90
|
+
const req = {
|
|
91
|
+
Bucket: bucketName,
|
|
92
|
+
Key: obKey,
|
|
93
|
+
};
|
|
94
|
+
const targetDataFile = targetDataFileIn || tmp.fileSync({ postfix: '.csv', keep: false }).name;
|
|
95
|
+
const fileStream = fs.createWriteStream(targetDataFile);
|
|
96
|
+
const output = await this.s3.send(new GetObjectCommand(req));
|
|
97
|
+
const readStream = output.Body;
|
|
98
|
+
readStream.pipe(fileStream);
|
|
99
|
+
const rval = await PromiseRatchet.resolveOnEvent(readStream, ['finish', 'close'], ['error'], targetDataFile);
|
|
100
|
+
Logger.silly('Response: %s', rval);
|
|
101
|
+
return targetDataFile;
|
|
102
|
+
}
|
|
103
|
+
async runQueryToOutputLocation(queryIn, queryParams = {}, pingTimeMS = 2000) {
|
|
104
|
+
let rval = null;
|
|
105
|
+
const timer = new StopWatch();
|
|
106
|
+
const query = StringRatchet.simpleTemplateFill(queryIn, queryParams, true, '{', '}');
|
|
107
|
+
try {
|
|
108
|
+
Logger.info('Starting query : %s', query);
|
|
109
|
+
const token = StringRatchet.createType4Guid();
|
|
110
|
+
const params = {
|
|
111
|
+
QueryString: query,
|
|
112
|
+
ResultConfiguration: {
|
|
113
|
+
OutputLocation: this.outputLocation,
|
|
114
|
+
EncryptionConfiguration: {
|
|
115
|
+
EncryptionOption: 'SSE_S3',
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
ClientRequestToken: token,
|
|
119
|
+
QueryExecutionContext: {
|
|
120
|
+
Database: 'default',
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
const startToken = await this.athena.send(new StartQueryExecutionCommand(params));
|
|
124
|
+
const getExecParams = {
|
|
125
|
+
QueryExecutionId: startToken.QueryExecutionId,
|
|
126
|
+
};
|
|
127
|
+
const finalStates = ['FAILED', 'CANCELLED', 'SUCCEEDED'];
|
|
128
|
+
let curState = await this.athena.send(new GetQueryExecutionCommand(getExecParams));
|
|
129
|
+
while (finalStates.indexOf(curState.QueryExecution.Status.State) === -1) {
|
|
130
|
+
await PromiseRatchet.createTimeoutPromise('wait', pingTimeMS);
|
|
131
|
+
Logger.debug('%s : %s : %s', curState.QueryExecution.Status.State, timer.dump(), query);
|
|
132
|
+
curState = await this.athena.send(new GetQueryExecutionCommand(getExecParams));
|
|
133
|
+
}
|
|
134
|
+
if (curState.QueryExecution.Status.State === 'FAILED') {
|
|
135
|
+
Logger.warn('Query failed : %s', curState.QueryExecution.Status.StateChangeReason);
|
|
136
|
+
}
|
|
137
|
+
else if (curState.QueryExecution.Status.State === 'SUCCEEDED') {
|
|
138
|
+
rval = curState.QueryExecution.ResultConfiguration.OutputLocation;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
Logger.warn('Failure : %s', err, err);
|
|
143
|
+
}
|
|
144
|
+
Logger.info('Query took %s : %s', timer.dump(), query);
|
|
145
|
+
return rval;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=athena-ratchet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"athena-ratchet.js","sourceRoot":"","sources":["../../src/athena/athena-ratchet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/athena/index.ts"],"names":[],"mappings":"AAIA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ratchet-aws-node-only-info.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/build/index.ts"],"names":[],"mappings":"AAIA,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class RatchetAwsNodeOnlyInfo {
|
|
2
|
+
constructor() { }
|
|
3
|
+
static buildInformation() {
|
|
4
|
+
const val = {
|
|
5
|
+
version: 'LOCAL-SNAPSHOT',
|
|
6
|
+
hash: 'LOCAL-HASH',
|
|
7
|
+
branch: 'LOCAL-BRANCH',
|
|
8
|
+
tag: 'LOCAL-TAG',
|
|
9
|
+
timeBuiltISO: 'LOCAL-TIME-ISO',
|
|
10
|
+
notes: 'LOCAL-NOTES',
|
|
11
|
+
};
|
|
12
|
+
return val;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ratchet-aws-node-only-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratchet-aws-node-only-info.js","sourceRoot":"","sources":["../../src/build/ratchet-aws-node-only-info.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,sBAAsB;IAGjC,gBAAuB,CAAC;IAEjB,MAAM,CAAC,gBAAgB;QAC5B,MAAM,GAAG,GAAqB;YAC5B,OAAO,EAAE,gBAAgB;YACzB,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,cAAc;YACtB,GAAG,EAAE,WAAW;YAChB,YAAY,EAAE,gBAAgB;YAC9B,KAAK,EAAE,aAAa;SACrB,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { WriteStream } from 'fs';
|
|
2
|
+
import { DynamoRatchet } from '@bitblit/ratchet-aws/dynamodb/dynamo-ratchet';
|
|
3
|
+
import { QueryCommandInput, ScanCommandInput } from '@aws-sdk/lib-dynamodb';
|
|
4
|
+
export declare class DynamoExporter {
|
|
5
|
+
private constructor();
|
|
6
|
+
static importJsonLFileToTable(dynamo: DynamoRatchet, tableName: string, filename: string): Promise<number>;
|
|
7
|
+
static exportScanToJsonLFile(dynamo: DynamoRatchet, scan: ScanCommandInput, filename: string): Promise<number>;
|
|
8
|
+
static exportQueryToJsonLFile(dynamo: DynamoRatchet, qry: QueryCommandInput, filename: string): Promise<number>;
|
|
9
|
+
static exportScanToJsonLWriteStream(dynamo: DynamoRatchet, scan: ScanCommandInput, target: WriteStream): Promise<number>;
|
|
10
|
+
static exportQueryToJsonLWriteStream(dynamo: DynamoRatchet, qry: QueryCommandInput, target: WriteStream): Promise<number>;
|
|
11
|
+
static writeItemToJsonLStream(item: any, target: WriteStream, includeNulls?: boolean): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
|
|
2
|
+
import { Logger } from '@bitblit/ratchet-common/logger/logger';
|
|
3
|
+
import { PromiseRatchet } from '@bitblit/ratchet-common/lang/promise-ratchet';
|
|
4
|
+
import { RequireRatchet } from '@bitblit/ratchet-common/lang/require-ratchet';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import readline from 'readline';
|
|
7
|
+
export class DynamoExporter {
|
|
8
|
+
constructor() { }
|
|
9
|
+
static async importJsonLFileToTable(dynamo, tableName, filename) {
|
|
10
|
+
RequireRatchet.notNullOrUndefined(dynamo, 'dynamo');
|
|
11
|
+
RequireRatchet.notNullOrUndefined(tableName, 'tableName');
|
|
12
|
+
RequireRatchet.notNullOrUndefined(filename, 'filename');
|
|
13
|
+
const fileStream = fs.createReadStream(filename);
|
|
14
|
+
const rl = readline.createInterface({
|
|
15
|
+
input: fileStream,
|
|
16
|
+
crlfDelay: Infinity,
|
|
17
|
+
});
|
|
18
|
+
let rval = 0;
|
|
19
|
+
for await (const line of rl) {
|
|
20
|
+
if (rval % 100 === 0) {
|
|
21
|
+
Logger.info('Importing line %d', rval);
|
|
22
|
+
}
|
|
23
|
+
if (StringRatchet.trimToNull(line)) {
|
|
24
|
+
const parsed = JSON.parse(line);
|
|
25
|
+
await dynamo.simplePut(tableName, parsed);
|
|
26
|
+
rval++;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return rval;
|
|
30
|
+
}
|
|
31
|
+
static async exportScanToJsonLFile(dynamo, scan, filename) {
|
|
32
|
+
RequireRatchet.notNullOrUndefined(dynamo, 'dynamo');
|
|
33
|
+
RequireRatchet.notNullOrUndefined(scan, 'scan');
|
|
34
|
+
RequireRatchet.notNullOrUndefined(filename, 'filename');
|
|
35
|
+
const ws = fs.createWriteStream(filename);
|
|
36
|
+
ws.on('end', () => {
|
|
37
|
+
Logger.debug('Write complete');
|
|
38
|
+
});
|
|
39
|
+
const rval = await DynamoExporter.exportScanToJsonLWriteStream(dynamo, scan, ws);
|
|
40
|
+
await PromiseRatchet.resolveOnEvent(ws, ['finish', 'close'], ['error']);
|
|
41
|
+
ws.close();
|
|
42
|
+
return rval;
|
|
43
|
+
}
|
|
44
|
+
static async exportQueryToJsonLFile(dynamo, qry, filename) {
|
|
45
|
+
RequireRatchet.notNullOrUndefined(dynamo, 'dynamo');
|
|
46
|
+
RequireRatchet.notNullOrUndefined(qry, 'qry');
|
|
47
|
+
RequireRatchet.notNullOrUndefined(filename, 'filename');
|
|
48
|
+
const ws = fs.createWriteStream(filename);
|
|
49
|
+
ws.on('end', () => {
|
|
50
|
+
Logger.debug('Write complete');
|
|
51
|
+
});
|
|
52
|
+
const rval = await DynamoExporter.exportQueryToJsonLWriteStream(dynamo, qry, ws);
|
|
53
|
+
await PromiseRatchet.resolveOnEvent(ws, ['finish', 'close'], ['error']);
|
|
54
|
+
ws.close();
|
|
55
|
+
return rval;
|
|
56
|
+
}
|
|
57
|
+
static async exportScanToJsonLWriteStream(dynamo, scan, target) {
|
|
58
|
+
RequireRatchet.notNullOrUndefined(dynamo, 'dynamo');
|
|
59
|
+
RequireRatchet.notNullOrUndefined(scan, 'scan');
|
|
60
|
+
RequireRatchet.notNullOrUndefined(target, 'target');
|
|
61
|
+
const rval = await dynamo.fullyExecuteProcessOverScan(scan, async (row) => DynamoExporter.writeItemToJsonLStream(row, target, false));
|
|
62
|
+
return rval;
|
|
63
|
+
}
|
|
64
|
+
static async exportQueryToJsonLWriteStream(dynamo, qry, target) {
|
|
65
|
+
RequireRatchet.notNullOrUndefined(dynamo, 'dynamo');
|
|
66
|
+
RequireRatchet.notNullOrUndefined(qry, 'qry');
|
|
67
|
+
RequireRatchet.notNullOrUndefined(target, 'target');
|
|
68
|
+
const rval = await dynamo.fullyExecuteProcessOverQuery(qry, async (row) => DynamoExporter.writeItemToJsonLStream(row, target, false));
|
|
69
|
+
return rval;
|
|
70
|
+
}
|
|
71
|
+
static writeItemToJsonLStream(item, target, includeNulls = false) {
|
|
72
|
+
if (!!item || includeNulls) {
|
|
73
|
+
target.write(JSON.stringify(item) + '\n');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=dynamo-exporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamo-exporter.js","sourceRoot":"","sources":["../../src/cli/dynamo-exporter.ts"],"names":[],"mappings":"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"}
|
package/lib/cli/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAIA,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AbstractRatchetCliHandler } from '@bitblit/ratchet-node-only/cli/abstract-ratchet-cli-handler';
|
|
2
|
+
import { BuildInformation } from '@bitblit/ratchet-common/build/build-information';
|
|
3
|
+
export declare class RatchetCliHandler extends AbstractRatchetCliHandler {
|
|
4
|
+
fetchHandlerMap(): Record<string, any>;
|
|
5
|
+
fetchVersionInfo(): BuildInformation;
|
|
6
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AbstractRatchetCliHandler } from '@bitblit/ratchet-node-only/cli/abstract-ratchet-cli-handler';
|
|
2
|
+
import { SiteUploader } from './site-uploader/site-uploader.js';
|
|
3
|
+
import { StartInstanceAndSsh } from './start-instance-and-ssh.js';
|
|
4
|
+
import { RatchetAwsNodeOnlyInfo } from '../build/ratchet-aws-node-only-info.js';
|
|
5
|
+
export class RatchetCliHandler extends AbstractRatchetCliHandler {
|
|
6
|
+
fetchHandlerMap() {
|
|
7
|
+
return {
|
|
8
|
+
'site-uploader': SiteUploader.runFromCliArgs,
|
|
9
|
+
'start-instance-and-ssh': StartInstanceAndSsh.runFromCliArgs,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
fetchVersionInfo() {
|
|
13
|
+
return RatchetAwsNodeOnlyInfo.buildInformation();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ratchet-cli-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratchet-cli-handler.js","sourceRoot":"","sources":["../../src/cli/ratchet-cli-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6DAA6D,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,MAAM,OAAO,iBAAkB,SAAQ,yBAAyB;IAC9D,eAAe;QACb,OAAO;YACL,eAAe,EAAE,YAAY,CAAC,cAAc;YAC5C,wBAAwB,EAAE,mBAAmB,CAAC,cAAc;SAC7D,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,OAAO,sBAAsB,CAAC,gBAAgB,EAAE,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class SiteUploader {
|
|
2
|
+
private srcDir;
|
|
3
|
+
private bucketName;
|
|
4
|
+
private config;
|
|
5
|
+
private readonly s3;
|
|
6
|
+
constructor(srcDir: string, bucketName: string, configFile: string);
|
|
7
|
+
static createFromArgs(args: string[]): SiteUploader;
|
|
8
|
+
static runFromCliArgs(args: string[]): Promise<void>;
|
|
9
|
+
findMatch(prefix: string, fileName: string, config: any): any;
|
|
10
|
+
findMime(fileName: string, config: any): string;
|
|
11
|
+
runPump(): Promise<any>;
|
|
12
|
+
}
|